From f62d4c7f1cdf97767d6203279593c42a0b1f1ca2 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Fri, 18 Jul 2014 00:15:05 +0200 Subject: [PATCH 001/480] sayto cmd with player name completion --- code/client/cl_main.c | 98 +++++++++++++++++++++++ code/qcommon/common.c | 174 +++++++++++++++++++++++++++++++++++++++++ code/qcommon/qcommon.h | 5 ++ code/server/sv_ccmds.c | 104 ++++++++++++++++++++++++ 4 files changed, 381 insertions(+) diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 2fa38af8..86f669c2 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -1809,6 +1809,50 @@ static void CL_CompleteRcon( char *args, int argNum ) } } +/* +================== +CL_CompletePlayerName +================== +*/ +static void CL_CompletePlayerName( char *args, int argNum ) +{ + if( argNum == 2 ) + { + char names[MAX_CLIENTS][MAX_NAME_LENGTH]; + char *namesPtr[MAX_CLIENTS]; + int i; + int clientCount; + int nameCount; + const char *info; + const char *name; + + //configstring + info = cl.gameState.stringData + cl.gameState.stringOffsets[CS_SERVERINFO]; + clientCount = atoi( Info_ValueForKey( info, "sv_maxclients" ) ); + + nameCount = 0; + + for( i = 0; i < clientCount; i++ ) { + if( i == clc.clientNum ) + continue; + + info = cl.gameState.stringData + cl.gameState.stringOffsets[CS_PLAYERS+i]; + + name = Info_ValueForKey( info, "n" ); + if( name[0] == '\0' ) + continue; + Q_strncpyz( names[nameCount], name, sizeof(names[nameCount]) ); + Q_CleanStr( names[nameCount] ); + + namesPtr[nameCount] = names[nameCount]; + nameCount++; + } + qsort( (void*)namesPtr, nameCount, sizeof( namesPtr[0] ), Com_strCompare ); + + Field_CompletePlayerName( namesPtr, nameCount ); + } +} + /* ===================== CL_Rcon_f @@ -3407,6 +3451,56 @@ static void CL_GenerateQKey(void) } } +void CL_Sayto_f( void ) { + char *rawname; + char name[MAX_NAME_LENGTH]; + char cleanName[MAX_NAME_LENGTH]; + const char *info; + int count; + int i; + int clientNum; + char *p; + + if ( Cmd_Argc() < 3 ) { + Com_Printf ("sayto \n"); + return; + } + + rawname = Cmd_Argv(1); + + Com_FieldStringToPlayerName( name, MAX_NAME_LENGTH, rawname ); + + info = cl.gameState.stringData + cl.gameState.stringOffsets[CS_SERVERINFO]; + count = atoi( Info_ValueForKey( info, "sv_maxclients" ) ); + + clientNum = -1; + for( i = 0; i < count; i++ ) { + + info = cl.gameState.stringData + cl.gameState.stringOffsets[CS_PLAYERS+i]; + Q_strncpyz( cleanName, Info_ValueForKey( info, "n" ), sizeof(cleanName) ); + Q_CleanStr( cleanName ); + + if ( !Q_stricmp( cleanName, name ) ) { + clientNum = i; + break; + } + } + if( clientNum <= -1 ) + { + Com_Printf ("No such player name: %s.\n", name); + return; + } + + p = Cmd_ArgsFrom(2); + + if ( *p == '"' ) { + p++; + p[strlen(p)-1] = 0; + } + + CL_AddReliableCommand(va("tell %i \"%s\"", clientNum, p ), qfalse); +} + /* ==================== CL_Init @@ -3609,6 +3703,10 @@ void CL_Init( void ) { Cmd_AddCommand ("model", CL_SetModel_f ); Cmd_AddCommand ("video", CL_Video_f ); Cmd_AddCommand ("stopvideo", CL_StopVideo_f ); + if( !com_dedicated->integer ) { + Cmd_AddCommand ("sayto", CL_Sayto_f ); + Cmd_SetCommandCompletionFunc( "sayto", CL_CompletePlayerName ); + } CL_InitRef(); SCR_Init (); diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 36cb4ce6..78bf0328 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -3584,3 +3584,177 @@ qboolean Com_IsVoipTarget(uint8_t *voipTargets, int voipTargetsSize, int clientN return qfalse; } + +/* +=============== +Field_CompletePlayerName +=============== +*/ +static qboolean Field_CompletePlayerNameFinal( qboolean whitespace ) +{ + int completionOffset; + + if( matchCount == 0 ) + return qtrue; + + completionOffset = strlen( completionField->buffer ) - strlen( completionString ); + + Q_strncpyz( &completionField->buffer[ completionOffset ], shortestMatch, + sizeof( completionField->buffer ) - completionOffset ); + + completionField->cursor = strlen( completionField->buffer ); + + if( matchCount == 1 && whitespace ) + { + Q_strcat( completionField->buffer, sizeof( completionField->buffer ), " " ); + completionField->cursor++; + return qtrue; + } + + return qfalse; +} + +static void Name_PlayerNameCompletion( const char **names, int nameCount, void(*callback)(const char *s) ) +{ + int i; + + for( i = 0; i < nameCount; i++ ) { + callback( names[ i ] ); + } +} + +qboolean Com_FieldStringToPlayerName( char *name, int length, const char *rawname ) +{ + char hex[5]; + int i; + int ch; + + if( name == NULL || rawname == NULL ) + return qfalse; + + if( length <= 0 ) + return qtrue; + + for( i = 0; *rawname && i + 1 <= length; rawname++, i++ ) { + if( *rawname == '\\' ) { + Q_strncpyz( hex, rawname + 1, sizeof(hex) ); + ch = Com_HexStrToInt( hex ); + if( ch > -1 ) { + name[i] = ch; + rawname += 4; //hex string length, 0xXX + } else { + name[i] = *rawname; + } + } else { + name[i] = *rawname; + } + } + name[i] = '\0'; + + return qtrue; +} + +qboolean Com_PlayerNameToFieldString( char *str, int length, const char *name ) +{ + const char *p; + int i; + int x1, x2; + + if( str == NULL || name == NULL ) + return qfalse; + + if( length <= 0 ) + return qtrue; + + *str = '\0'; + p = name; + + for( i = 0; *p != '\0'; i++, p++ ) + { + if( i + 1 >= length ) + break; + + if( *p <= ' ' ) + { + if( i + 5 + 1 >= length ) + break; + + x1 = *p >> 4; + x2 = *p & 15; + + str[i+0] = '\\'; + str[i+1] = '0'; + str[i+2] = 'x'; + str[i+3] = x1 > 9 ? x1 - 10 + 'a' : x1 + '0'; + str[i+4] = x2 > 9 ? x2 - 10 + 'a' : x2 + '0'; + + i += 4; + } else { + str[i] = *p; + } + } + str[i] = '\0'; + + return qtrue; +} + +void Field_CompletePlayerName( char **names, int nameCount ) +{ + qboolean whitespace; + + matchCount = 0; + shortestMatch[ 0 ] = 0; + + if( nameCount <= 0 ) + return; + + Name_PlayerNameCompletion( names, nameCount, FindMatches ); + + if( completionString[0] == '\0' ) + { + Com_PlayerNameToFieldString( shortestMatch, sizeof( shortestMatch ), names[ 0 ] ); + } + + //allow to tab player names + //if full player name switch to next player name + if( completionString[0] != '\0' + && Q_stricmp( shortestMatch, completionString ) == 0 + && nameCount > 1 ) + { + int i; + + for( i = 0; i < nameCount; i++ ) { + if( Q_stricmp( names[ i ], completionString ) == 0 ) + { + i++; + if( i >= nameCount ) + { + i = 0; + } + + Com_PlayerNameToFieldString( shortestMatch, sizeof( shortestMatch ), names[ i ] ); + break; + } + } + } + + if( matchCount > 1 ) + { + Com_Printf( "]%s\n", completionField->buffer ); + + Name_PlayerNameCompletion( names, nameCount, PrintMatches ); + } + + whitespace = nameCount == 1? qtrue: qfalse; + if( !Field_CompletePlayerNameFinal( whitespace ) ) + { + + } +} + +int QDECL Com_strCompare( const void *a, const void *b ) +{ + const char **pa = (const char **)a; + const char **pb = (const char **)b; + return strcmp( *pa, *pb ); +} diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index 414b341b..b4f2b272 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -759,6 +759,7 @@ void Field_CompleteFilename( const char *dir, const char *ext, qboolean stripExt, qboolean allowNonPureFilesOnDisk ); void Field_CompleteCommand( char *cmd, qboolean doCommands, qboolean doCvars ); +void Field_CompletePlayerName( char **names, int count ); /* ============================================================== @@ -838,6 +839,10 @@ void Com_StartupVariable( const char *match ); // if match is NULL, all set commands will be executed, otherwise // only a set with the exact name. Only used during startup. +qboolean Com_PlayerNameToFieldString( char *str, int length, const char *name ); +qboolean Com_FieldStringToPlayerName( char *name, int length, const char *rawname ); +int QDECL Com_strCompare( const void *a, const void *b ); + extern cvar_t *com_developer; extern cvar_t *com_dedicated; diff --git a/code/server/sv_ccmds.c b/code/server/sv_ccmds.c index 1b723399..506afcca 100644 --- a/code/server/sv_ccmds.c +++ b/code/server/sv_ccmds.c @@ -1303,6 +1303,71 @@ static void SV_ConTell_f(void) { } +/* +================== +SV_ConSayto_f +================== +*/ +static void SV_ConSayto_f(void) { + char *p; + char text[1024]; + client_t *cl; + char *rawname; + char name[MAX_NAME_LENGTH]; + char cleanName[MAX_NAME_LENGTH]; + client_t *saytocl; + int i; + + // make sure server is running + if ( !com_sv_running->integer ) { + Com_Printf( "Server is not running.\n" ); + return; + } + + if ( Cmd_Argc() < 3 ) { + Com_Printf ("Usage: sayto \n"); + return; + } + + rawname = Cmd_Argv(1); + + //allowing special characters in the console + //with hex strings for player names + Com_FieldStringToPlayerName( name, MAX_NAME_LENGTH, rawname ); + + saytocl = NULL; + for ( i=0, cl=svs.clients ; i < sv_maxclients->integer ; i++,cl++ ) { + if ( !cl->state ) { + continue; + } + Q_strncpyz( cleanName, cl->name, sizeof(cleanName) ); + Q_CleanStr( cleanName ); + + if ( !Q_stricmp( cleanName, name ) ) { + saytocl = cl; + break; + } + } + if( !saytocl ) + { + Com_Printf ("No such player name: %s.\n", name); + return; + } + + strcpy (text, "console_sayto: "); + p = Cmd_ArgsFrom(2); + + if ( *p == '"' ) { + p++; + p[strlen(p)-1] = 0; + } + + strcat(text, p); + + SV_SendServerCommand(saytocl, "chat \"%s\"", text); +} + + /* ================== SV_Heartbeat_f @@ -1407,6 +1472,43 @@ static void SV_CompleteMapName( char *args, int argNum ) { } } +/* +================== +SV_CompletePlayerName +================== +*/ +static void SV_CompletePlayerName( char *args, int argNum ) { + if( argNum == 2 ) { + char names[MAX_CLIENTS][MAX_NAME_LENGTH]; + char *namesPtr[MAX_CLIENTS]; + client_t *cl; + int i; + int nameCount; + int clientCount; + + nameCount = 0; + clientCount = sv_maxclients->integer; + + for ( i=0, cl=svs.clients ; i < clientCount; i++,cl++ ) { + if ( !cl->state ) { + continue; + } + if( i >= MAX_CLIENTS ) { + break; + } + Q_strncpyz( names[nameCount], cl->name, sizeof(names[nameCount]) ); + Q_CleanStr( names[nameCount] ); + + namesPtr[nameCount] = names[nameCount]; + + nameCount++; + } + qsort( (void*)namesPtr, nameCount, sizeof( namesPtr[0] ), Com_strCompare ); + + Field_CompletePlayerName( namesPtr, nameCount ); + } +} + /* ================== SV_AddOperatorCommands @@ -1453,6 +1555,8 @@ void SV_AddOperatorCommands( void ) { if( com_dedicated->integer ) { Cmd_AddCommand ("say", SV_ConSay_f); Cmd_AddCommand ("tell", SV_ConTell_f); + Cmd_AddCommand ("sayto", SV_ConSayto_f); + Cmd_SetCommandCompletionFunc( "sayto", SV_CompletePlayerName ); } Cmd_AddCommand("rehashbans", SV_RehashBans_f); From 6214f73af551844f3dd62517d8289e3b6b660f80 Mon Sep 17 00:00:00 2001 From: Ludwig Nussel Date: Thu, 23 Oct 2014 13:00:17 +0200 Subject: [PATCH 002/480] a VM for ARMv7l --- Makefile | 10 + code/qcommon/vm_armv7l.c | 1210 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 1220 insertions(+) create mode 100644 code/qcommon/vm_armv7l.c diff --git a/Makefile b/Makefile index d4d42294..ed8dd4d6 100644 --- a/Makefile +++ b/Makefile @@ -360,6 +360,9 @@ ifneq (,$(findstring "$(PLATFORM)", "linux" "gnu_kfreebsd" "kfreebsd-gnu")) OPTIMIZEVM += -mtune=ultrasparc3 -mv8plus HAVE_VM_COMPILED=true endif + ifeq ($(ARCH),armv7l) + HAVE_VM_COMPILED=true + endif ifeq ($(ARCH),alpha) # According to http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=410555 # -ffast-math will cause the client to die with SIGFPE on Alpha @@ -1284,6 +1287,7 @@ targets: makedirs @echo " VERSION: $(VERSION)" @echo " COMPILE_PLATFORM: $(COMPILE_PLATFORM)" @echo " COMPILE_ARCH: $(COMPILE_ARCH)" + @echo " HAVE_VM_COMPILED: $(HAVE_VM_COMPILED)" @echo " CC: $(CC)" ifeq ($(PLATFORM),mingw32) @echo " WINDRES: $(WINDRES)" @@ -2082,6 +2086,9 @@ ifeq ($(HAVE_VM_COMPILED),true) ifeq ($(ARCH),sparc) Q3OBJ += $(B)/client/vm_sparc.o endif + ifeq ($(ARCH),armv7l) + Q3OBJ += $(B)/client/vm_armv7l.o + endif endif ifeq ($(PLATFORM),mingw32) @@ -2250,6 +2257,9 @@ ifeq ($(HAVE_VM_COMPILED),true) ifeq ($(ARCH),sparc) Q3DOBJ += $(B)/ded/vm_sparc.o endif + ifeq ($(ARCH),armv7l) + Q3DOBJ += $(B)/client/vm_armv7l.o + endif endif ifeq ($(PLATFORM),mingw32) diff --git a/code/qcommon/vm_armv7l.c b/code/qcommon/vm_armv7l.c new file mode 100644 index 00000000..dd63f5c7 --- /dev/null +++ b/code/qcommon/vm_armv7l.c @@ -0,0 +1,1210 @@ +/* +=========================================================================== +Copyright (C) 2009 David S. Miller +Copyright (C) 2013,2014 SUSE Linux Products GmbH + +This file is part of Quake III Arena source code. + +Quake III Arena source code 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. + +Quake III Arena source code 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 Quake III Arena source code; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== + +ARMv7l VM by Ludwig Nussel + +TODO: optimization + +Docu: +http://www.coranac.com/tonc/text/asm.htm +http://www.heyrick.co.uk/armwiki/Category:Opcodes +ARMv7-A_ARMv7-R_DDI0406_2007.pdf +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "vm_local.h" +#define R0 0 +#define R1 1 +#define R2 2 +#define R3 3 +#define R4 4 + +#define R12 12 + +#define FP 11 +#define SP 13 +#define LR 14 +#define PC 15 + +#define APSR_nzcv 15 + +#define S14 14 +#define S15 15 + +#define rOPSTACK 5 +#define rOPSTACKBASE 6 +#define rCODEBASE 7 +#define rPSTACK 8 +#define rDATABASE 9 +#define rDATAMASK 10 + +#define bit(x) (1<compiled = qfalse; return; } while(0) +#endif + +static void VM_Destroy_Compiled(vm_t *vm) +{ + if (vm->codeBase) { + if (munmap(vm->codeBase, vm->codeLength)) + Com_Printf(S_COLOR_RED "Memory unmap failed, possible memory leak\n"); + } + vm->codeBase = NULL; +} + +/* +================= +ErrJump +Error handler for jump/call to invalid instruction number +================= +*/ + +static void __attribute__((__noreturn__)) ErrJump(unsigned num) +{ + Com_Error(ERR_DROP, "program tried to execute code outside VM (%x)", num); +} + +static int asmcall(int call, int pstack) +{ + // save currentVM so as to allow for recursive VM entry + vm_t *savedVM = currentVM; + int i, ret; + + // modify VM stack pointer for recursive VM entry + currentVM->programStack = pstack - 4; + + if (sizeof(intptr_t) == sizeof(int)) { + intptr_t *argPosition = (intptr_t *)((byte *)currentVM->dataBase + pstack + 4); + argPosition[0] = -1 - call; + ret = currentVM->systemCall(argPosition); + } else { + intptr_t args[MAX_VMSYSCALL_ARGS]; + + args[0] = -1 - call; + int *argPosition = (int *)((byte *)currentVM->dataBase + pstack + 4); + for( i = 1; i < ARRAY_LEN(args); i++ ) + args[i] = argPosition[i]; + + ret = currentVM->systemCall(args); + } + + currentVM = savedVM; + + return ret; +} + +void _emit(vm_t *vm, unsigned isn, int pass) +{ +#if 0 + static int fd = -2; + if (fd == -2) + fd = open("code.bin", O_TRUNC|O_WRONLY|O_CREAT, 0644); + if (fd > 0) + write(fd, &isn, 4); +#endif + + if (pass) + memcpy(vm->codeBase+vm->codeLength, &isn, 4); + vm->codeLength+=4; +} + +#define emit(isn) _emit(vm, isn, pass) + +static unsigned char off8(unsigned val) +{ + if (val&3) + DIE("offset must be multiple of four"); + if (val > 1020) + DIE("offset too large"); + return val>>2; +} + +// ARM is really crazy ... +static unsigned short rimm(unsigned val) +{ + unsigned shift = 0; + if (val < 256) + return val; + // rotate the value until it fits + while (shift < 16 && (val>255 || !(val&3))) { + val = (val&3)<<30 | val>>2; + ++shift; + } + if (shift > 15 || val > 255) { + DIE("immediate cannot be encoded (%d, %d)\n", shift, val); + } + return (16-shift)<<8 | val; +} + +// same as rimm but doesn't die, returns 0 if not encodable so don't call with zero as argument! +static unsigned short can_encode(unsigned val) +{ + unsigned shift = 0; + if (!val) + DIE("can_encode: invalid argument"); + if (val < 256) + return val; + // rotate the value until it fits + while (shift < 16 && (val>255 || !(val&3))) { + val = (val&3)<<30 | val>>2; + ++shift; + } + if (shift > 15 || val > 255) { + return 0; + } + return (16-shift)<<8 | val; +} + +#define PREINDEX (1<<24) + +#define rASR(i, reg) (0b10<<5 | ((i&31)<<7) | reg) +#define rLSL(i, reg) (0b00<<5 | ((i&31)<<7) | reg) +#define rLSR(i, reg) (0b01<<5 | ((i&31)<<7) | reg) +#define rROR(i, reg) (0b11<<5 | ((i&31)<<7) | reg) + +// conditions +#define EQ (0b0000<<28) +#define NE (0b0001<<28) +#define CS (0b0010<<28) +#define HS CS +#define CC (0b0011<<28) +#define LO CC +#define MI (0b0100<<28) +#define PL (0b0101<<28) +#define VS (0b0110<<28) +#define VC (0b0111<<28) +#define HI (0b1000<<28) +#define LS (0b1001<<28) +#define GE (0b1010<<28) +#define LT (0b1011<<28) +#define GT (0b1100<<28) +#define LE (0b1101<<28) +#define AL (0b1110<<28) +#define cond(what, op) (what | (op&~AL)) + +// XXX: v not correctly computed +#define BKPT(v) (AL | 0b10010<<20 | ((v&~0xF)<<4) | 0b0111<<4 | (v&0xF)) + +#define YIELD (0b110010<<20 | 0b1111<<12 | 1) +#define NOP cond(AL, YIELD) + +// immediate value must fit in 0xFF! +#define ANDi(dst, src, i) (AL | (0b001<<25) | (0b00000<<20) | (src<<16) | (dst<<12) | rimm(i)) +#define EORi(dst, src, i) (AL | (0b001<<25) | (0b00010<<20) | (src<<16) | (dst<<12) | rimm(i)) +#define SUBi(dst, src, i) (AL | (0b001<<25) | (0b00100<<20) | (src<<16) | (dst<<12) | rimm(i)) +#define RSBi(dst, src, i) (AL | (0b001<<25) | (0b00110<<20) | (src<<16) | (dst<<12) | rimm(i)) +#define ADDi(dst, src, i) (AL | (0b001<<25) | (0b01000<<20) | (src<<16) | (dst<<12) | rimm(i)) +#define ADCi(dst, src, i) (AL | (0b001<<25) | (0b01010<<20) | (src<<16) | (dst<<12) | rimm(i)) +#define SBCi(dst, src, i) (AL | (0b001<<25) | (0b01100<<20) | (src<<16) | (dst<<12) | rimm(i)) +#define RSCi(dst, src, i) (AL | (0b001<<25) | (0b01110<<20) | (src<<16) | (dst<<12) | rimm(i)) + +#define ORRi(dst, src, i) (AL | (0b001<<25) | (0b11000<<20) | (src<<16) | (dst<<12) | rimm(i)) +#define MOVi(dst, i) (AL | (0b001<<25) | (0b11010<<20) | (dst<<12) | rimm(i)) +#define BICi(dst, src, i) (AL | (0b001<<25) | (0b11100<<20) | (src<<16) | (dst<<12) | rimm(i)) +#define MVNi(dst, i) (AL | (0b001<<25) | (0b11110<<20) | (dst<<12) | rimm(i)) + +#define MOVW(dst, i) (AL | (0b11<<24) | ((((i)>>12)&0xF)<<16) | (dst<<12) | ((i)&((1<<12)-1))) +#define MOVT(dst, i) (AL | (0b11<<24) | (0b0100<<20) | ((((i)>>12)&0xF)<<16) | (dst<<12) | ((i)&((1<<12)-1))) + +#define TSTi( src, i) (AL | (0b001<<25) | (0b10001<<20) | (src<<16) | rimm(i)) +#define TEQi( src, i) (AL | (0b001<<25) | (0b10011<<20) | (src<<16) | rimm(i)) +#define CMPi( src, i) (AL | (0b001<<25) | (0b10101<<20) | (src<<16) | rimm(i)) +#define CMNi( src, i) (AL | (0b001<<25) | (0b10111<<20) | (src<<16) | rimm(i)) + +#define ANDSi(dst, src, i) (ANDi(dst, src, i) | (1<<20)) +#define EORSi(dst, src, i) (EORi(dst, src, i) | (1<<20)) +#define SUBSi(dst, src, i) (SUBi(dst, src, i) | (1<<20)) +#define RSBSi(dst, src, i) (RSBi(dst, src, i) | (1<<20)) +#define ADDSi(dst, src, i) (ADDi(dst, src, i) | (1<<20)) +#define ADCSi(dst, src, i) (ADCi(dst, src, i) | (1<<20)) +#define SBCSi(dst, src, i) (SBCi(dst, src, i) | (1<<20)) +#define RSCSi(dst, src, i) (RSCi(dst, src, i) | (1<<20)) + +#define ORRSi(dst, src, i) (ORRi(dst, src, i) | (1<<20)) +#define MOVSi(dst, i) (MOVi(dst, i) | (1<<20)) +#define BICSi(dst, src, i) (BICi(dst, src, i) | (1<<20)) +#define MVNSi(dst, i) (MVNi(dst, src, i) | (1<<20)) + +#define AND(dst, src, reg) (AL | (0b000<<25) | (0b00000<<20) | (src<<16) | (dst<<12) | reg) +#define EOR(dst, src, reg) (AL | (0b000<<25) | (0b00010<<20) | (src<<16) | (dst<<12) | reg) +#define SUB(dst, src, reg) (AL | (0b000<<25) | (0b00100<<20) | (src<<16) | (dst<<12) | reg) +#define RSB(dst, src, reg) (AL | (0b000<<25) | (0b00110<<20) | (src<<16) | (dst<<12) | reg) +#define ADD(dst, src, reg) (AL | (0b000<<25) | (0b01000<<20) | (src<<16) | (dst<<12) | reg) +#define ADC(dst, src, reg) (AL | (0b000<<25) | (0b01010<<20) | (src<<16) | (dst<<12) | reg) +#define SBC(dst, src, reg) (AL | (0b000<<25) | (0b01100<<20) | (src<<16) | (dst<<12) | reg) +#define RSC(dst, src, reg) (AL | (0b000<<25) | (0b01110<<20) | (src<<16) | (dst<<12) | reg) + +#define ORR(dst, src, reg) (AL | (0b000<<25) | (0b11000<<20) | (src<<16) | (dst<<12) | reg) +#define MOV(dst, src) (AL | (0b000<<25) | (0b11010<<20) | (dst<<12) | src) + +#define LSL(dst, src, reg) (AL | (0b000<<25) | (0b1101<<21) | (0<<20) | (dst<<12) | (reg<<8) | (0b0001<<4) | src) +#define LSR(dst, src, reg) (AL | (0b000<<25) | (0b1101<<21) | (0<<20) | (dst<<12) | (reg<<8) | (0b0011<<4) | src) +#define ASR(dst, src, reg) (AL | (0b000<<25) | (0b1101<<21) | (0<<20) | (dst<<12) | (reg<<8) | (0b0101<<4) | src) +#define ROR(dst, src, reg) (AL | (0b000<<25) | (0b1101<<21) | (0<<20) | (dst<<12) | (reg<<8) | (0b0111<<4) | src) + +#define LSLi(dst, src, i) (AL | (0b000<<25) | (0b1101<<21) | (0<<20) | (dst<<12) | ((i&0x1F)<<7) | (0b000<<4) | src) +#define LSRi(dst, src, i) (AL | (0b000<<25) | (0b1101<<21) | (0<<20) | (dst<<12) | ((i&0x1F)<<7) | (0b010<<4) | src) +#define ASRi(dst, src, i) (AL | (0b000<<25) | (0b1101<<21) | (0<<20) | (dst<<12) | ((i&0x1F)<<7) | (0b100<<4) | src) +#define RORi(dst, src, i) (AL | (0b000<<25) | (0b1101<<21) | (0<<20) | (dst<<12) | ((i&0x1F)<<7) | (0b110<<4) | src) +#define RRX(dst, src) (AL | (0b000<<25) | (0b1101<<21) | (0<<20) | (dst<<12) | (0b110<<4) | src) + +#define BIC(dst, src, reg) (AL | (0b000<<25) | (0b11100<<20) | (src<<16) | (dst<<12) | reg) +#define MVN(dst, reg) (AL | (0b000<<25) | (0b11110<<20) | (dst<<12) | reg) + +#define TST( src, reg) (AL | (0b000<<25) | (0b10001<<20) | (src<<16) | reg) +#define TEQ( src, reg) (AL | (0b000<<25) | (0b10011<<20) | (src<<16) | reg) +#define CMP( src, reg) (AL | (0b000<<25) | (0b10101<<20) | (src<<16) | reg) +#define CMN( src, reg) (AL | (0b000<<25) | (0b10111<<20) | (src<<16) | reg) + +#define LDRa(dst, base, off) (AL | (0b011<<25) | (0b1100<<21) | (1<<20) | base<<16 | dst<<12 | off) +#define LDRx(dst, base, off) (AL | (0b011<<25) | (0b1000<<21) | (1<<20) | base<<16 | dst<<12 | off) + +#define LDRai(dst, base, off) (AL | (0b010<<25) | (0b1100<<21) | (1<<20) | base<<16 | dst<<12 | rimm(off)) +#define LDRxi(dst, base, off) (AL | (0b010<<25) | (0b1000<<21) | (1<<20) | base<<16 | dst<<12 | rimm(off)) +#define LDRxiw(dst, base, off) (AL | (0b010<<25) | (0b1001<<21) | (1<<20) | base<<16 | dst<<12 | rimm(off)) + +#define LDRTa(dst, base, off) (AL | (0b011<<25) | (0b0101<<21) | (1<<20) | base<<16 | dst<<12 | off) +#define LDRTx(dst, base, off) (AL | (0b011<<25) | (0b0001<<21) | (1<<20) | base<<16 | dst<<12 | off) +#define LDRTai(dst, base, off) (AL | (0b010<<25) | (0b0101<<21) | (1<<20) | base<<16 | dst<<12 | rimm(off)) +#define LDRTxi(dst, base, off) (AL | (0b010<<25) | (0b0001<<21) | (1<<20) | base<<16 | dst<<12 | rimm(off)) + +#define LDRBa(dst, base, off) (AL | (0b011<<25) | (0b1110<<21) | (1<<20) | base<<16 | dst<<12 | off) +#define LDRSBai(dst, base, off) (AL | (0b000<<25) | (0b0110<<21) | (1<<20) | base<<16 | dst<<12 | ((off&0xF0)<<4)|0b1101<<4|(off&0x0F)) +#define STRBa(dst, base, off) (AL | (0b011<<25) | (0b1110<<21) | (0<<20) | base<<16 | dst<<12 | off) + +#define LDRHa(dst, base, off) (AL | (0b000<<25) | (0b1100<<21) | (1<<20) | base<<16 | dst<<12 | (0b1011<<4) | off) +#define LDRSHai(dst, base, off) (AL | (0b000<<25) | (0b1110<<21) | (1<<20) | base<<16 | dst<<12 | ((off&0xF0)<<4)|0b1111<<4|(off&0x0F)) +#define STRHa(dst, base, off) (AL | (0b000<<25) | (0b1100<<21) | (0<<20) | base<<16 | dst<<12 | (0b1011<<4) | off) + +#define STRa(dst, base, off) (AL | (0b011<<25) | (0b1100<<21) | (0<<20) | base<<16 | dst<<12 | off) +#define STRx(dst, base, off) (AL | (0b011<<25) | (0b1000<<21) | (0<<20) | base<<16 | dst<<12 | off) +#define STRai(dst, base, off) (AL | (0b010<<25) | (0b1100<<21) | (0<<20) | base<<16 | dst<<12 | rimm(off)) +#define STRxi(dst, base, off) (AL | (0b010<<25) | (0b1000<<21) | (0<<20) | base<<16 | dst<<12 | rimm(off)) +#define STRaiw(dst, base, off) (AL | (0b010<<25) | (0b1101<<21) | (0<<20) | base<<16 | dst<<12 | rimm(off)) +#define STRxiw(dst, base, off) (AL | (0b010<<25) | (0b1001<<21) | (0<<20) | base<<16 | dst<<12 | rimm(off)) + +// load with post-increment +#define POP1(reg) (AL | (0b010<<25) | (0b0100<<21) | (1<<20) | SP<<16 | reg<<12 | reg) +// store with post-increment +#define PUSH1(reg) (AL | (0b010<<25) | (0b1001<<21) | (0<<20) | SP<<16 | reg<<12 | 4) + +// branch to target address (for small jumps) +#define Bi(i) \ + (AL | (0b10)<<26 | (1<<25) /*I*/ | (0<<24) /*L*/ | (i)) +// call subroutine +#define BLi(i) \ + (AL | (0b10)<<26 | (1<<25) /*I*/ | (1<<24) /*L*/ | (i)) +// branch and exchange (register) +#define BX(reg) \ + (AL | 0b00010010<<20 | 0b1111<<16 | 0b1111<<12 | 0b1111<<8| 0b0001<<4 | reg) +// call subroutine (register) +#define BLX(reg) \ + (AL | 0b00010010<<20 | 0b1111<<16 | 0b1111<<12 | 0b1111<<8| 0b0011<<4 | reg) + +#define PUSH(mask) (AL | (0b100100<<22) | (0b10<<20) | (0b1101<<16) | mask) +#define PUSH2(r1, r2) (AL | (0b100100<<22) | (0b10<<20) | (0b1101<<16) | 1< 0xFFFF) \ + emit(MOVT(reg, (((arg>>16)&0xFFFF)))); \ + } while(0) + +// puts integer arg in register reg. adds nop if only one instr is needed to +// make size constant +#define emit_MOVRxi_or_NOP(reg, arg) do { \ + emit(MOVW(reg, (arg&0xFFFF))); \ + if (arg > 0xFFFF) \ + emit(MOVT(reg, (((arg>>16)&0xFFFF)))); \ + else \ + emit(NOP); \ + } while(0) + +// arm core register -> singe precision register +#define VMOVass(Vn, Rt) (AL|(0b1110<<24)|(0b000<<21)|(0<<20)| ((Vn>>1)<<16) | (Rt<<12) | (0b1010<<8) | ((Vn&1)<<7) | (1<<4)) +// singe precision register -> arm core register +#define VMOVssa(Rt, Vn) (AL|(0b1110<<24)|(0b000<<21)|(1<<20)| ((Vn>>1)<<16) | (Rt<<12) | (0b1010<<8) | ((Vn&1)<<7) | (1<<4)) + +#define _VCVT_F(Vd, Vm, opc2, op) \ + (AL|(0b11101<<23)|((Vd&1)<<22)|(0b111<<19)|(opc2<<16)|((Vd>>1)<<12)|(0b101<<9)|(0<<8)|(op<<7)|(1<<6)|((Vm&1)<<5)|(Vm>>1)) +#define VCVT_F32_U32(Sd, Sm) _VCVT_F(Sd, Sm, 0b000, 0 /* unsigned */) +#define VCVT_U32_F32(Sd, Sm) _VCVT_F(Sd, Sm, 0b100, 1 /* round zero */) +#define VCVT_F32_S32(Sd, Sm) _VCVT_F(Sd, Sm, 0b000, 1 /* unsigned */) +#define VCVT_S32_F32(Sd, Sm) _VCVT_F(Sd, Sm, 0b101, 1 /* round zero */) + +#define VLDRa(Vd, Rn, i) (AL|(0b1101<<24)|1<<23|((Vd&1)<<22)|1<<20|(Rn<<16)|((Vd>>1)<<12)|(0b1010<<8)|off8(i)) +#define VSTRa(Vd, Rn, i) (AL|(0b1101<<24)|1<<23|((Vd&1)<<22)|0<<20|(Rn<<16)|((Vd>>1)<<12)|(0b1010<<8)|off8(i)) + +#define VNEG_F32(Vd, Vm) \ + (AL|(0b11101<<23)|((Vd&1)<<22)|(0b11<<20)|(1<<16)|((Vd>>1)<<12)|(0b101<<9)|(0<<8)|(1<<6)|((Vm&1)<<5)|(Vm>>1)) + +#define VADD_F32(Vd, Vn, Vm) \ + (AL|(0b11100<<23)|((Vd&1)<<22)|(0b11<<20)|((Vn>>1)<<16)|((Vd>>1)<<12)|(0b101<<9)|(0<<8)|((Vn&1)<<7)|(0<<6)|((Vm&1)<<5)|(Vm>>1)) +#define VSUB_F32(Vd, Vn, Vm) \ + (AL|(0b11100<<23)|((Vd&1)<<22)|(0b11<<20)|((Vn>>1)<<16)|((Vd>>1)<<12)|(0b101<<9)|(0<<8)|((Vn&1)<<7)|(1<<6)|((Vm&1)<<5)|(Vm>>1)) +#define VMUL_F32(Vd, Vn, Vm) \ + (AL|(0b11100<<23)|((Vd&1)<<22)|(0b10<<20)|((Vn>>1)<<16)|((Vd>>1)<<12)|(0b101)<<9|(0<<8)|((Vn&1)<<7)|(0<<6)|((Vm&1)<<5)|(Vm>>1)) +#define VDIV_F32(Vd, Vn, Vm) \ + (AL|(0b11101<<23)|((Vd&1)<<22)|(0b00<<20)|((Vn>>1)<<16)|((Vd>>1)<<12)|(0b101<<9)|(0<<8)|((Vn&1)<<7)|(0<<6)|((Vm&1)<<5)|(Vm>>1)) + +#define _VCMP_F32(Vd, Vm, E) \ + (AL|(0b11101<<23)|((Vd&1)<<22)|(0b11<<20)|((0b0100)<<16)|((Vd>>1)<<12)|(0b101<<9)|(0<<8)|(E<<7)|(1<<6)|((Vm&1)<<5)|(Vm>>1)) +#define VCMP_F32(Vd, Vm) _VCMP_F32(Vd, Vm, 0) + +#define VMRS(Rt) \ + (AL|(0b11101111<<20)|(0b0001<<16)|(Rt<<12)|(0b1010<<8)|(1<<4)) + +// check if instruction in R0 is within range. Clobbers R1, R12 +#define CHECK_JUMP do { \ + static int bytes_to_skip = -1; \ + static unsigned branch = -1; \ + emit_MOVRxi(R1, (unsigned)vm->instructionCount); \ + emit(CMP(R0, R1)); \ + if (branch == -1) \ + branch = vm->codeLength; \ + emit(cond(LT, Bi(j_rel(bytes_to_skip)))); \ + emit_MOVRxi_or_NOP(R12, (unsigned)ErrJump); \ + emit(BLX(R12)); \ + if (bytes_to_skip == -1) \ + bytes_to_skip = vm->codeLength - branch; \ +} while(0) + +//#define CONST_OPTIMIZE +#ifdef CONST_OPTIMIZE +#define MAYBE_EMIT_CONST() \ + if (got_const) \ + { \ + got_const = 0; \ + vm->instructionPointers[instruction-1] = assembler_get_code_size(); \ + STACK_PUSH(4); \ + emit("movl $%d, (%%r9, %%rbx, 4)", const_value); \ + } +#else +#define MAYBE_EMIT_CONST() +#endif + +// optimize: use load multiple +#define IJ(comparator) do { \ + MAYBE_EMIT_CONST(); \ + emit_MOVRxi(R0, arg.i); \ + CHECK_JUMP; \ + emit(LDRTxi(R0, rOPSTACK, 4)); \ + emit(LDRTxi(R1, rOPSTACK, 4)); \ + emit(CMP(R1, R0)); \ + emit(cond(comparator, Bi(j_rel(vm->instructionPointers[arg.i]-vm->codeLength)))); \ +} while (0) + +#define FJ(comparator) do { \ + emit_MOVRxi(R0, arg.i); \ + CHECK_JUMP; \ + emit(SUBi(rOPSTACK, rOPSTACK, 8)); \ + emit(VLDRa(S15, rOPSTACK, 4)); \ + emit(VLDRa(S14, rOPSTACK, 8)); \ + emit(VCMP_F32(S15, S14)); \ + emit(VMRS(APSR_nzcv)); \ + emit(cond(comparator, Bi(j_rel(vm->instructionPointers[arg.i]-vm->codeLength)))); \ +} while (0) + +#define printreg(reg) emit(PUSH1(R3)); emit(BLX(reg)); emit(POP1(R3)); + +static inline unsigned _j_rel(int x, int pc) +{ + if (x&3) goto err; + x = (x>>2)-2; + if (x < 0) + { + if ((x&(0xFF<<24)) != 0xFF<<24) + goto err; + x &= ~(0xFF<<24); + } + else if (x&(0xFF<<24)) + goto err; + return x; +err: + DIE("jump %d out of range at %d", x, pc); +} + +void VM_Compile(vm_t *vm, vmHeader_t *header) +{ + unsigned char *code; + int i_count, pc = 0; + int pass; + int codeoffsets[1024]; + +#define j_rel(x) (pass?_j_rel(x, pc):0xBAD) +#define OFFSET(i) (pass?(j_rel(codeoffsets[i]-vm->codeLength)):(0xF000000F)) +#define new_offset() (offsidx++) +#define get_offset(i) (codeoffsets[i]) +#define save_offset(i) (codeoffsets[i] = vm->codeLength) +#define OFF_CODE 0 +#define OFF_IMMEDIATES 1 + + vm->compiled = qfalse; + + vm->codeBase = NULL; + vm->codeLength = 0; + + for (pass = 0; pass < 2; ++pass) { + + int offsidx = 0; + + // const optimization + unsigned got_const = 0, const_value = 0; + + if(pass) + { + vm->codeBase = mmap(NULL, vm->codeLength, PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0); + if(vm->codeBase == MAP_FAILED) + Com_Error(ERR_FATAL, "VM_CompileARM: can't mmap memory"); + vm->codeLength = 0; + } + + //int (*entry)(vm_t*, int*, int*); + emit(PUSH((((1<<8)-1)<<4)|(1<<14))); // push R4-R11, LR + emit(SUBi(SP, SP, 12)); // align stack! + emit(LDRai(rCODEBASE, R0, offsetof(vm_t, codeBase))); + emit(LDRai(rDATABASE, R0, offsetof(vm_t, dataBase))); + emit(LDRai(rDATAMASK, R0, offsetof(vm_t, dataMask))); + emit(LDRai(rPSTACK, R1, 0)); + emit(MOV(rOPSTACK, R2)); // TODO: reverse opstack to avoid writing to return address + emit(MOV(rOPSTACKBASE, rOPSTACK)); + + emit(BLi(OFFSET(OFF_CODE))); + + // save return value in r0 + emit(LDRTxi(R0, rOPSTACK, 4)); // r0 = *opstack; rOPSTACK -= 4 + + emit(ADDi(SP, SP, 12)); // align stack! + emit(POP((((1<<8)-1)<<4)|(1<<15))); // pop R4-R11, LR -> PC + + /* save some immediates here */ + emit(BKPT(0)); + emit(BKPT(0)); + save_offset(OFF_IMMEDIATES); +// emit((unsigned)whatever); + emit(BKPT(0)); + emit(BKPT(0)); + + save_offset(OFF_CODE); + offsidx = OFF_IMMEDIATES+1; + + code = (unsigned char *) header + header->codeOffset; + pc = 0; + + for (i_count = 0; i_count < header->instructionCount; i_count++) { + union { + unsigned char b[4]; + unsigned int i; + } arg; + unsigned char op = code[pc++]; + + vm->instructionPointers[i_count] = vm->codeLength; + + if (vm_opInfo[op] & opImm4) + { + memcpy(arg.b, &code[pc], 4); + pc += 4; +#ifdef EXCESSIVE_DEBUG + Com_Printf("%d: instruction %d (%s %d), offset %d\n", pass, i_count, opnames[op], arg.i, vm->codeLength); +#endif + } + else if (vm_opInfo[op] & opImm1) + { + arg.b[0] = code[pc]; + ++pc; +#ifdef EXCESSIVE_DEBUG + Com_Printf("%d: instruction %d (%s %hhd), offset %d\n", pass, i_count, opnames[op], arg.i, vm->codeLength); +#endif + } + else + { +#ifdef EXCESSIVE_DEBUG + Com_Printf("%d: instruction %d (%s), offset %d\n", pass, i_count, opnames[op], vm->codeLength); +#endif + } + + // TODO: for debug only + //emit_MOVRxi(R4, i_count); + + switch ( op ) + { + case OP_UNDEF: + break; + + case OP_IGNORE: + NOTIMPL(op); + break; + + case OP_BREAK: + emit(BKPT(0)); + break; + + case OP_ENTER: + MAYBE_EMIT_CONST(); + emit(PUSH1(LR)); + emit(SUBi(SP, SP, 12)); // align stack + if (arg.i == 0 || can_encode(arg.i)) + { + emit(SUBi(rPSTACK, rPSTACK, arg.i)); // pstack -= arg + } + else + { + emit_MOVR0i(arg.i); + emit(SUB(rPSTACK, rPSTACK, R0)); // pstack -= arg + } + break; + + case OP_LEAVE: + if (arg.i == 0 || can_encode(arg.i)) + { + emit(ADDi(rPSTACK, rPSTACK, arg.i)); // pstack += arg + } + else + { + emit_MOVR0i(arg.i); + emit(ADD(rPSTACK, rPSTACK, R0)); // pstack += arg + } + emit(ADDi(SP, SP, 12)); + emit(0xe49df004); // pop pc + break; + + case OP_CALL: +#if 0 + // save next instruction + emit_MOVR0i(i_count); + emit(STRa(R0, rDATABASE, rPSTACK)); // dataBase[pstack] = r0 +#endif + if (got_const) { + NOTIMPL(op); + } else { + static int bytes_to_skip = -1; + static unsigned start_block = -1; + MAYBE_EMIT_CONST(); + // get instruction nr from stack + emit(LDRTxi(R0, rOPSTACK, 4)); // r0 = *opstack; rOPSTACK -= 4 + emit(CMPi(R0, 0)); // check if syscall + if (start_block == -1) + start_block = vm->codeLength; + emit(cond(LT, Bi(j_rel(bytes_to_skip)))); + CHECK_JUMP; + emit_MOVRxi_or_NOP(R1, (unsigned)vm->instructionPointers); + emit(LDRa(R0, R1, rLSL(2, R0))); // r0 = ((int*)r1)[r0] + emit(ADD(R0, rCODEBASE, R0)); // r0 = codeBase+r0 + emit(BLX(R0)); + emit(Bi(j_rel(vm->instructionPointers[i_count+1]-vm->codeLength))); + if (bytes_to_skip == -1) + bytes_to_skip = vm->codeLength - start_block; + emit(MOV(R1, rPSTACK)); + emit_MOVRxi(R12, (unsigned)asmcall); + emit(BLX(R12)); + // store return value + emit(STRaiw(R0, rOPSTACK, 4)); // opstack+=4; *opstack = r0 + } + break; + + case OP_PUSH: + MAYBE_EMIT_CONST(); + emit(ADDi(rOPSTACK, rOPSTACK, 4)); + break; + + case OP_POP: + MAYBE_EMIT_CONST(); + emit(SUBi(rOPSTACK, rOPSTACK, 4)); + break; + + case OP_CONST: + MAYBE_EMIT_CONST(); + emit_MOVR0i(arg.i); + emit(STRaiw(R0, rOPSTACK, 4)); // opstack+=4; *opstack = r0 + break; + + case OP_LOCAL: + MAYBE_EMIT_CONST(); + if (arg.i == 0 || can_encode(arg.i)) + { + emit(ADDi(R0, rPSTACK, arg.i)); // r0 = pstack+arg + } + else + { + emit_MOVR0i(arg.i); + emit(ADD(R0, rPSTACK, R0)); // r0 = pstack+arg + } + emit(STRaiw(R0, rOPSTACK, 4)); // opstack+=4; *opstack = r0 + break; + + case OP_JUMP: + if(got_const) { + NOTIMPL(op); + } else { + emit(LDRTxi(R0, rOPSTACK, 4)); // r0 = *opstack; rOPSTACK -= 4 + CHECK_JUMP; + emit_MOVRxi(R1, (unsigned)vm->instructionPointers); + emit(LDRa(R0, R1, rLSL(2, R0))); // r0 = ((int*)r1)[r0] + emit(ADD(R0, rCODEBASE, R0)); // r0 = codeBase+r0 + emit(BLX(R0)); + } + break; + + case OP_EQ: + IJ(EQ); + break; + + case OP_NE: + IJ(NE); + break; + + case OP_LTI: + IJ(LT); + break; + + case OP_LEI: + IJ(LE); + break; + + case OP_GTI: + IJ(GT); + break; + + case OP_GEI: + IJ(GE); + break; + + case OP_LTU: + IJ(LO); + break; + + case OP_LEU: + IJ(LS); + break; + + case OP_GTU: + IJ(HI); + break; + + case OP_GEU: + IJ(HS); + break; + + case OP_EQF: + FJ(EQ); + break; + + case OP_NEF: + FJ(NE); + break; + + case OP_LTF: + FJ(LT); + break; + + case OP_LEF: + FJ(LE); + break; + + case OP_GTF: + FJ(GT); + break; + + case OP_GEF: + FJ(GE); + break; + + case OP_LOAD1: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(AND(R0, rDATAMASK, R0)); // r0 = r0 & rDATAMASK + emit(LDRBa(R0, rDATABASE, R0)); // r0 = (unsigned char)dataBase[r0] + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_LOAD2: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(AND(R0, rDATAMASK, R0)); // r0 = r0 & rDATAMASK + emit(LDRHa(R0, rDATABASE, R0)); // r0 = (unsigned short)dataBase[r0] + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_LOAD4: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(AND(R0, rDATAMASK, R0)); // r0 = r0 & rDATAMASK + emit(LDRa(R0, rDATABASE, R0)); // r0 = dataBase[r0] + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_STORE1: + MAYBE_EMIT_CONST(); + emit(LDRTxi(R0, rOPSTACK, 4)); // r0 = *opstack; rOPSTACK -= 4 + emit(LDRTxi(R1, rOPSTACK, 4)); // r1 = *opstack; rOPSTACK -= 4 + emit(AND(R1, rDATAMASK, R1)); // r1 = r1 & rDATAMASK + emit(STRBa(R0, rDATABASE, R1)); // database[r1] = r0 + break; + + case OP_STORE2: + MAYBE_EMIT_CONST(); + emit(LDRTxi(R0, rOPSTACK, 4)); // r0 = *opstack; rOPSTACK -= 4 + emit(LDRTxi(R1, rOPSTACK, 4)); // r1 = *opstack; rOPSTACK -= 4 + emit(AND(R1, rDATAMASK, R1)); // r1 = r1 & rDATAMASK + emit(STRHa(R0, rDATABASE, R1)); // database[r1] = r0 + break; + + case OP_STORE4: + MAYBE_EMIT_CONST(); + // optimize: use load multiple + // value + emit(LDRTxi(R0, rOPSTACK, 4)); // r0 = *opstack; rOPSTACK -= 4 + // pointer + emit(LDRTxi(R1, rOPSTACK, 4)); // r1 = *opstack; rOPSTACK -= 4 + emit(AND(R1, rDATAMASK, R1)); // r1 = r1 & rDATAMASK + // store value at pointer + emit(STRa(R0, rDATABASE, R1)); // database[r1] = r0 + break; + + case OP_ARG: + MAYBE_EMIT_CONST(); + emit(LDRTxi(R0, rOPSTACK, 4)); // r0 = *opstack; rOPSTACK -= 4 + emit(ADDi(R1, rPSTACK, arg.b[0])); // r1 = programStack+arg + emit(AND(R1, rDATAMASK, R1)); // r1 = r1 & rDATAMASK + emit(STRa(R0, rDATABASE, R1)); // dataBase[r1] = r0 + break; + + case OP_BLOCK_COPY: + MAYBE_EMIT_CONST(); + emit(LDRTxi(R1, rOPSTACK, 4)); // r0 = *opstack; rOPSTACK -= 4 + emit(LDRTxi(R0, rOPSTACK, 4)); + emit_MOVRxi(R2, arg.i); + emit_MOVRxi(R12, (unsigned)VM_BlockCopy); + emit(BLX(R12)); + break; + + case OP_SEX8: + MAYBE_EMIT_CONST(); + emit(LDRSBai(R0, rOPSTACK, 0)); // sign extend *opstack + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_SEX16: + MAYBE_EMIT_CONST(); + emit(LDRSHai(R0, rOPSTACK, 0)); // sign extend *opstack + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_NEGI: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(RSBi(R0, R0, 0)); // r0 = -r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_ADD: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(LDRxiw(R1, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(ADD(R0, R1, R0)); // r0 = r1 + r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_SUB: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(LDRxiw(R1, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(SUB(R0, R1, R0)); // r0 = r1 - r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_DIVI: + case OP_DIVU: + MAYBE_EMIT_CONST(); + emit(LDRai(R1, rOPSTACK, 0)); // r1 = *opstack + emit(LDRxiw(R0, rOPSTACK, 4)); // opstack-=4; r0 = *opstack + if ( op == OP_DIVI ) + emit_MOVRxi(R12, (unsigned)__aeabi_idiv); + else + emit_MOVRxi(R12, (unsigned)__aeabi_uidiv); + emit(BLX(R12)); + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_MODI: + case OP_MODU: + MAYBE_EMIT_CONST(); + emit(LDRai(R1, rOPSTACK, 0)); // r1 = *opstack + emit(LDRxiw(R0, rOPSTACK, 4)); // opstack-=4; r0 = *opstack + if ( op == OP_MODI ) + emit_MOVRxi(R12, (unsigned)__aeabi_idivmod); + else + emit_MOVRxi(R12, (unsigned)__aeabi_uidivmod); + emit(BLX(R12)); + emit(STRai(R1, rOPSTACK, 0)); // *opstack = r1 + break; + + case OP_MULI: + case OP_MULU: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(LDRxiw(R1, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(MUL(R0, R1, R0)); // r0 = r1 * r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_BAND: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(LDRxiw(R1, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(AND(R0, R1, R0)); // r0 = r1 & r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_BOR: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(LDRxiw(R1, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(ORR(R0, R1, R0)); // r0 = r1 | r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_BXOR: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(LDRxiw(R1, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(EOR(R0, R1, R0)); // r0 = r1 ^ r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_BCOM: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(MVN(R0, R0)); // r0 = ~r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_LSH: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(LDRxiw(R1, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(LSL(R0, R1, R0)); // r0 = r1 << r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_RSHI: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(LDRxiw(R1, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(ASR(R0, R1, R0)); // r0 = r1 >> r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_RSHU: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(LDRxiw(R1, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(LSR(R0, R1, R0)); // r0 = (unsigned)r1 >> r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + + case OP_NEGF: + MAYBE_EMIT_CONST(); + emit(VLDRa(S14, rOPSTACK, 0)); // s14 = *((float*)opstack) + emit(VNEG_F32(S14, S14)); // s15 = -s14 + emit(VSTRa(S14, rOPSTACK, 0)); // *((float*)opstack) = s15 + break; + + case OP_ADDF: + MAYBE_EMIT_CONST(); + emit(VLDRa(S14, rOPSTACK, 0)); // s14 = *((float*)opstack) + // vldr can't modify rOPSTACK so + // we'd either need to change it + // with sub or use regular ldr+vmov + emit(LDRxiw(R0, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(VMOVass(S15,R0)); // s15 = r0 + emit(VADD_F32(S14, S15, S14)); // s14 = s14 + s15 + emit(VSTRa(S14, rOPSTACK, 0)); // *((float*)opstack) = s15 + break; + + case OP_SUBF: + emit(VLDRa(S14, rOPSTACK, 0)); // s14 = *((float*)opstack) + // see OP_ADDF + emit(LDRxiw(R0, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(VMOVass(S15,R0)); // s15 = r0 + emit(VSUB_F32(S14, S15, S14)); // s14 = s14 - s15 + emit(VSTRa(S14, rOPSTACK, 0)); // *((float*)opstack) = s15 + break; + + case OP_DIVF: + emit(VLDRa(S14, rOPSTACK, 0)); // s14 = *((float*)opstack) + // see OP_ADDF + emit(LDRxiw(R0, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(VMOVass(S15,R0)); // s15 = r0 + emit(VDIV_F32(S14, S15, S14)); // s14 = s14 / s15 + emit(VSTRa(S14, rOPSTACK, 0)); // *((float*)opstack) = s15 + break; + + case OP_MULF: + emit(VLDRa(S14, rOPSTACK, 0)); // s14 = *((float*)opstack) + // see OP_ADDF + emit(LDRxiw(R0, rOPSTACK, 4)); // opstack-=4; r1 = *opstack + emit(VMOVass(S15,R0)); // s15 = r0 + emit(VMUL_F32(S14, S15, S14)); // s14 = s14 * s15 + emit(VSTRa(S14, rOPSTACK, 0)); // *((float*)opstack) = s15 + break; + + case OP_CVIF: + MAYBE_EMIT_CONST(); + emit(LDRai(R0, rOPSTACK, 0)); // r0 = *opstack + emit(VMOVass(S14,R0)); // s14 = r0 + emit(VCVT_F32_S32(S14, S14)); // s15 = (float)s14 + emit(VSTRa(S14, rOPSTACK, 0)); // *((float*)opstack) = s15 + break; + + case OP_CVFI: + MAYBE_EMIT_CONST(); + emit(VLDRa(S14, rOPSTACK, 0)); // s14 = *((float*)opstack) + emit(VCVT_S32_F32(S14, S14)); // s15 = (int)s14 + emit(VMOVssa(R0,S14)); // s14 = r0 + emit(STRai(R0, rOPSTACK, 0)); // *opstack = r0 + break; + } + } + + // never reached + emit(BKPT(0)); + } // pass + + if (mprotect(vm->codeBase, vm->codeLength, PROT_READ|PROT_EXEC/* |PROT_WRITE */)) { + VM_Destroy_Compiled(vm); + DIE("mprotect failed"); + } + + // clear icache, http://blogs.arm.com/software-enablement/141-caches-and-self-modifying-code/ + __clear_cache(vm->codeBase, vm->codeBase+vm->codeLength); + + vm->destroy = VM_Destroy_Compiled; + vm->compiled = qtrue; +} + +int VM_CallCompiled(vm_t *vm, int *args) +{ + byte stack[OPSTACK_SIZE + 15]; + int *opStack; + int programStack = vm->programStack; + int stackOnEntry = programStack; + byte *image = vm->dataBase; + int *argPointer; + int retVal; + + currentVM = vm; + + vm->currentlyInterpreting = qtrue; + + programStack -= ( 8 + 4 * MAX_VMMAIN_ARGS ); + argPointer = (int *)&image[ programStack + 8 ]; + memcpy( argPointer, args, 4 * MAX_VMMAIN_ARGS ); + argPointer[-1] = 0; + argPointer[-2] = -1; + + + opStack = PADP(stack, 16); + *opStack = 0xDEADBEEF; + +#if 0 + Com_Printf("r5 opStack:\t\t%p\n", opStack); + Com_Printf("r7 codeBase:\t\t%p\n", vm->codeBase); + Com_Printf("r8 programStack:\t0x%x\n", programStack); + Com_Printf("r9 dataBase:\t\t%p\n", vm->dataBase); +#endif + + /* call generated code */ + { + //int (*entry)(void *, int, void *, int); + int (*entry)(vm_t*, int*, int*); + + entry = (void *)(vm->codeBase); + //__asm__ volatile("bkpt"); + //retVal = entry(vm->codeBase, programStack, vm->dataBase, vm->dataMask); + retVal = entry(vm, &programStack, opStack); + } + + if(*opStack != 0xDEADBEEF) + { + Com_Error(ERR_DROP, "opStack corrupted in compiled code"); + } + + if(programStack != stackOnEntry - (8 + 4 * MAX_VMMAIN_ARGS)) + Com_Error(ERR_DROP, "programStack corrupted in compiled code"); + + vm->programStack = stackOnEntry; + vm->currentlyInterpreting = qfalse; + + return retVal; +} From 50038a7d26628973c2bd8b47e4efe8e7039c8040 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Sun, 26 Oct 2014 17:10:41 +0100 Subject: [PATCH 003/480] qcurl_multi_add_handle error check --- code/client/cl_curl.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 901ef999..9f186aed 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -211,6 +211,8 @@ static size_t CL_cURL_CallbackWrite(void *buffer, size_t size, size_t nmemb, void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) { + CURLMcode result; + clc.cURLUsed = qtrue; Com_Printf("URL: %s\n", remoteURL); Com_DPrintf("***** CL_cURL_BeginDownload *****\n" @@ -271,7 +273,11 @@ void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) "failed"); return; } - qcurl_multi_add_handle(clc.downloadCURLM, clc.downloadCURL); + result = qcurl_multi_add_handle(clc.downloadCURLM, clc.downloadCURL); + if(result != CURLM_OK) { + Com_Error(ERR_DROP,"CL_cURL_BeginDownload: qcurl_multi_add_handle() failed: %s", qcurl_multi_strerror(result)); + return; + } if(!(clc.sv_allowDownload & DLF_NO_DISCONNECT) && !clc.cURLDisconnected) { From dd3c6619bcbe30178a0635cd664a0ad552233a64 Mon Sep 17 00:00:00 2001 From: Michael Rieder Date: Fri, 2 Jan 2015 02:31:10 +0100 Subject: [PATCH 004/480] rephrase SSE availability message --- code/qcommon/common.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 3f06c75b..2f7c8574 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -2592,7 +2592,7 @@ static void Com_DetectSSE(void) #endif Q_VMftol = qvmftolsse; - Com_Printf("Have SSE support\n"); + Com_Printf("SSE instruction set enabled\n"); #if !idx64 } else @@ -2601,7 +2601,7 @@ static void Com_DetectSSE(void) Q_VMftol = qvmftolx87; Q_SnapVector = qsnapvectorx87; - Com_Printf("No SSE support on this machine\n"); + Com_Printf("SSE instruction set not available\n"); } #endif } From 7c5feef6a2f828b6c59948e93e0cbd0820a514f8 Mon Sep 17 00:00:00 2001 From: Michael Rieder Date: Wed, 7 Jan 2015 23:47:18 +0100 Subject: [PATCH 005/480] Have custom intro cinematics for standalone game --- code/qcommon/common.c | 4 ++-- code/qcommon/q_shared.h | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 3f06c75b..878dc0ec 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -2805,10 +2805,10 @@ void Com_Init( char *commandLine ) { if ( !Com_AddStartupCommands() ) { // if the user didn't give any commands, run default action if ( !com_dedicated->integer ) { - Cbuf_AddText ("cinematic idlogo.RoQ\n"); + Cbuf_AddText ("cinematic " CINEMATICS_LOGO "\n"); if( !com_introPlayed->integer ) { Cvar_Set( com_introPlayed->name, "1" ); - Cvar_Set( "nextmap", "cinematic intro.RoQ" ); + Cvar_Set( "nextmap", "cinematic " CINEMATICS_INTRO ); } } } diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index 90996a29..6867795c 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -35,6 +35,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define HOMEPATH_NAME_WIN "FooBar" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN #define GAMENAME_FOR_MASTER "foobar" // must NOT contain whitespace + #define CINEMATICS_LOGO "foologo.roq" + #define CINEMATICS_INTRO "intro.roq" // #define LEGACY_PROTOCOL // You probably don't need this for your standalone game #else #define PRODUCT_NAME "ioq3" @@ -45,6 +47,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define HOMEPATH_NAME_WIN "Quake3" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN #define GAMENAME_FOR_MASTER "Quake3Arena" + #define CINEMATICS_LOGO "idlogo.RoQ" + #define CINEMATICS_INTRO "intro.RoQ" #define LEGACY_PROTOCOL #endif From 2a38bca9312cfbfcd2a36409c48263ecf3cb643d Mon Sep 17 00:00:00 2001 From: Pan7 Date: Fri, 24 Jul 2015 22:56:00 +0200 Subject: [PATCH 006/480] SDL_Init zero check --- code/sdl/sdl_glimp.c | 2 +- code/sdl/sdl_input.c | 2 +- code/sdl/sdl_snd.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index 1402031f..107ce4e4 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -491,7 +491,7 @@ static qboolean GLimp_StartDriverAndSetMode(int mode, qboolean fullscreen, qbool { const char *driverName; - if (SDL_Init(SDL_INIT_VIDEO) == -1) + if (SDL_Init(SDL_INIT_VIDEO) != 0) { ri.Printf( PRINT_ALL, "SDL_Init( SDL_INIT_VIDEO ) FAILED (%s)\n", SDL_GetError()); return qfalse; diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 1264ef0d..74b46c5d 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -431,7 +431,7 @@ static void IN_InitJoystick( void ) if (!SDL_WasInit(SDL_INIT_JOYSTICK)) { Com_DPrintf("Calling SDL_Init(SDL_INIT_JOYSTICK)...\n"); - if (SDL_Init(SDL_INIT_JOYSTICK) == -1) + if (SDL_Init(SDL_INIT_JOYSTICK) != 0) { Com_DPrintf("SDL_Init(SDL_INIT_JOYSTICK) failed: %s\n", SDL_GetError()); return; diff --git a/code/sdl/sdl_snd.c b/code/sdl/sdl_snd.c index 710c0362..609aed9e 100644 --- a/code/sdl/sdl_snd.c +++ b/code/sdl/sdl_snd.c @@ -156,7 +156,7 @@ qboolean SNDDMA_Init(void) if (!SDL_WasInit(SDL_INIT_AUDIO)) { - if (SDL_Init(SDL_INIT_AUDIO) == -1) + if (SDL_Init(SDL_INIT_AUDIO) != 0) { Com_Printf( "FAILED (%s)\n", SDL_GetError( ) ); return qfalse; From 9e08cdb16a588c81f2ac2372347223b56886b512 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Sun, 26 Jul 2015 03:21:45 +0200 Subject: [PATCH 007/480] SDL_FALSE/TRUE for SDL_SetWindowGrab --- code/sdl/sdl_input.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 1264ef0d..8238e668 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -321,7 +321,7 @@ static void IN_ActivateMouse( void ) if( !mouseActive ) { SDL_SetRelativeMouseMode( SDL_TRUE ); - SDL_SetWindowGrab( SDL_window, 1 ); + SDL_SetWindowGrab( SDL_window, SDL_TRUE ); IN_GobbleMotionEvents( ); } @@ -332,9 +332,9 @@ static void IN_ActivateMouse( void ) if( in_nograb->modified || !mouseActive ) { if( in_nograb->integer ) - SDL_SetWindowGrab( SDL_window, 0 ); + SDL_SetWindowGrab( SDL_window, SDL_FALSE ); else - SDL_SetWindowGrab( SDL_window, 1 ); + SDL_SetWindowGrab( SDL_window, SDL_TRUE ); in_nograb->modified = qfalse; } @@ -365,7 +365,7 @@ static void IN_DeactivateMouse( void ) { IN_GobbleMotionEvents( ); - SDL_SetWindowGrab( SDL_window, 0 ); + SDL_SetWindowGrab( SDL_window, SDL_FALSE ); SDL_SetRelativeMouseMode( SDL_FALSE ); // Don't warp the mouse unless the cursor is within the window From 2003a054f9c8412ad0028b7d662d2affd169ced9 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Sun, 26 Jul 2015 04:31:27 +0200 Subject: [PATCH 008/480] SDL_SetWindowGammaRamp check --- code/sdl/sdl_gamma.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/sdl/sdl_gamma.c b/code/sdl/sdl_gamma.c index b1af55ab..ce8bf28b 100644 --- a/code/sdl/sdl_gamma.c +++ b/code/sdl/sdl_gamma.c @@ -88,6 +88,9 @@ void GLimp_SetGamma( unsigned char red[256], unsigned char green[256], unsigned } } - SDL_SetWindowGammaRamp(SDL_window, table[0], table[1], table[2]); + if (SDL_SetWindowGammaRamp(SDL_window, table[0], table[1], table[2]) < 0) + { + ri.Printf( PRINT_DEVELOPER, "SDL_SetWindowGammaRamp() failed.\n" ); + } } From 9694e93fd20e869d5da148634ae0eaf3ba5fc57f Mon Sep 17 00:00:00 2001 From: Pan7 Date: Sun, 26 Jul 2015 13:03:47 +0200 Subject: [PATCH 009/480] SDL_GetWindowDisplayIndex check --- code/sdl/sdl_glimp.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index f9b3e845..37bd976a 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -136,6 +136,11 @@ static void GLimp_DetectAvailableModes(void) SDL_DisplayMode windowMode; int display = SDL_GetWindowDisplayIndex( SDL_window ); + if( display < 0 ) + { + ri.Printf( PRINT_WARNING, "Couldn't get window display index, no resolutions detected\n" ); + return; + } numSDLModes = SDL_GetNumDisplayModes( display ); if( SDL_GetWindowDisplayMode( SDL_window, &windowMode ) < 0 || numSDLModes <= 0 ) From 6fb47ce9bfd1b6deeded9aacea8e4339ac45fdbe Mon Sep 17 00:00:00 2001 From: Pan7 Date: Sun, 26 Jul 2015 13:54:29 +0200 Subject: [PATCH 010/480] SDL_CreateWindow NULL check --- code/sdl/sdl_glimp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index f9b3e845..d7745113 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -435,7 +435,7 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder) #endif if( ( SDL_window = SDL_CreateWindow( CLIENT_WINDOW_TITLE, x, y, - glConfig.vidWidth, glConfig.vidHeight, flags ) ) == 0 ) + glConfig.vidWidth, glConfig.vidHeight, flags ) ) == NULL ) { ri.Printf( PRINT_DEVELOPER, "SDL_CreateWindow failed: %s\n", SDL_GetError( ) ); continue; From 4b176297e21f9cc6ee8f9bda0cf644ab9e5632c0 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Sun, 26 Jul 2015 15:41:41 +0200 Subject: [PATCH 011/480] Added SDL_GetError() --- code/sdl/sdl_glimp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index 37bd976a..ce6b22d3 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -138,14 +138,14 @@ static void GLimp_DetectAvailableModes(void) int display = SDL_GetWindowDisplayIndex( SDL_window ); if( display < 0 ) { - ri.Printf( PRINT_WARNING, "Couldn't get window display index, no resolutions detected\n" ); + ri.Printf( PRINT_WARNING, "Couldn't get window display index, no resolutions detected: %s\n", SDL_GetError() ); return; } numSDLModes = SDL_GetNumDisplayModes( display ); if( SDL_GetWindowDisplayMode( SDL_window, &windowMode ) < 0 || numSDLModes <= 0 ) { - ri.Printf( PRINT_WARNING, "Couldn't get window display mode, no resolutions detected\n" ); + ri.Printf( PRINT_WARNING, "Couldn't get window display mode, no resolutions detected: %s\n", SDL_GetError() ); return; } From 19c4048315ce54dd20303a10c88e3b2f5fdfceb1 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Sun, 26 Jul 2015 15:45:21 +0200 Subject: [PATCH 012/480] Added SDL_GetError() --- code/sdl/sdl_gamma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/sdl/sdl_gamma.c b/code/sdl/sdl_gamma.c index ce8bf28b..a1e0cb5b 100644 --- a/code/sdl/sdl_gamma.c +++ b/code/sdl/sdl_gamma.c @@ -90,7 +90,7 @@ void GLimp_SetGamma( unsigned char red[256], unsigned char green[256], unsigned if (SDL_SetWindowGammaRamp(SDL_window, table[0], table[1], table[2]) < 0) { - ri.Printf( PRINT_DEVELOPER, "SDL_SetWindowGammaRamp() failed.\n" ); + ri.Printf( PRINT_DEVELOPER, "SDL_SetWindowGammaRamp() failed: %s\n", SDL_GetError() ); } } From 56808ab51f1c2c2736417aff31b99ca0bbfb47b6 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Sun, 26 Jul 2015 19:46:07 +0200 Subject: [PATCH 013/480] SDL_GetWindowDisplayIndex() check2 --- code/sdl/sdl_glimp.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index f9b3e845..76c8cac7 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -245,9 +245,15 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder) // If a window exists, note its display index if( SDL_window != NULL ) + { display = SDL_GetWindowDisplayIndex( SDL_window ); + if( display < 0 ) + { + ri.Printf( PRINT_DEVELOPER, "SDL_GetWindowDisplayIndex() failed: %s\n", SDL_GetError() ); + } + } - if( SDL_GetDesktopDisplayMode( display, &desktopMode ) == 0 ) + if( display >= 0 && SDL_GetDesktopDisplayMode( display, &desktopMode ) == 0 ) { displayAspect = (float)desktopMode.w / (float)desktopMode.h; From 525eac0d992744ffdb4eee94457d9f2b3eedc2f1 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Sun, 26 Jul 2015 20:23:48 +0200 Subject: [PATCH 014/480] SDL_GL_SetSwapInterval() check --- code/sdl/sdl_glimp.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index f9b3e845..2889e6b0 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -476,7 +476,10 @@ static int GLimp_SetMode(int mode, qboolean fullscreen, qboolean noborder) qglClear( GL_COLOR_BUFFER_BIT ); SDL_GL_SwapWindow( SDL_window ); - SDL_GL_SetSwapInterval( r_swapInterval->integer ); + if( SDL_GL_SetSwapInterval( r_swapInterval->integer ) == -1 ) + { + ri.Printf( PRINT_DEVELOPER, "SDL_GL_SetSwapInterval failed: %s\n", SDL_GetError( ) ); + } glConfig.colorBits = testColorBits; glConfig.depthBits = testDepthBits; From 2a8bf94de1dd3437633cababc9268e4cd4b44d75 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sun, 26 Jul 2015 21:27:25 -0500 Subject: [PATCH 015/480] Fix 'Invalid architecture' message in make-macosx-app.sh --- make-macosx-app.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make-macosx-app.sh b/make-macosx-app.sh index 7e484dd4..00a92f02 100755 --- a/make-macosx-app.sh +++ b/make-macosx-app.sh @@ -42,7 +42,7 @@ if [ "$2" != "" ]; then elif [ "$2" == "ppc" ]; then CURRENT_ARCH="ppc" else - echo "Invalid architecture: $1" + echo "Invalid architecture: $2" echo "Valid architectures are:" echo " x86" echo " x86_64" From 85faec91ab3a36c86adec7f6003fc308de268e50 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Mon, 27 Jul 2015 20:38:20 +0200 Subject: [PATCH 016/480] qcurl_multi_remove_handle check --- code/client/cl_curl.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 901ef999..8f8f29bd 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -178,8 +178,13 @@ void CL_cURL_Cleanup(void) { if(clc.downloadCURLM) { if(clc.downloadCURL) { - qcurl_multi_remove_handle(clc.downloadCURLM, + CURLMcode result; + + result = qcurl_multi_remove_handle(clc.downloadCURLM, clc.downloadCURL); + if(result != CURLM_OK) { + Com_DPrintf("qcurl_multi_remove_handle failed: %s\n", curl_multi_strerror(result)); + } qcurl_easy_cleanup(clc.downloadCURL); } qcurl_multi_cleanup(clc.downloadCURLM); From 4db5c3af40df390edd16fcf051723a6ffb8c0fd7 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Mon, 27 Jul 2015 21:04:47 +0200 Subject: [PATCH 017/480] qcurl_multi_strerror not curl_multi_strerror --- code/client/cl_curl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 8f8f29bd..91ee4487 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -183,7 +183,7 @@ void CL_cURL_Cleanup(void) result = qcurl_multi_remove_handle(clc.downloadCURLM, clc.downloadCURL); if(result != CURLM_OK) { - Com_DPrintf("qcurl_multi_remove_handle failed: %s\n", curl_multi_strerror(result)); + Com_DPrintf("qcurl_multi_remove_handle failed: %s\n", qcurl_multi_strerror(result)); } qcurl_easy_cleanup(clc.downloadCURL); } From c2e146c1451e635905fbcb88b2a9785add986926 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Tue, 28 Jul 2015 17:23:31 +0200 Subject: [PATCH 018/480] qcurl_easy_setopt dev warning --- code/client/cl_curl.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 53dd296d..f3e93420 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -214,6 +214,16 @@ static size_t CL_cURL_CallbackWrite(void *buffer, size_t size, size_t nmemb, return size*nmemb; } +CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, va_list args) +{ + CURLcode result; + + result = qcurl_easy_setopt(curl, option, args); + if(result != CURLE_OK) { + Com_DPrintf("qcurl_easy_setopt failed: %s\n", qcurl_easy_strerror(result)); + } +} + void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) { CURLMcode result; @@ -253,23 +263,23 @@ void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) } if(com_developer->integer) - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_VERBOSE, 1); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_URL, clc.downloadURL); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_TRANSFERTEXT, 0); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_REFERER, va("ioQ3://%s", + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_VERBOSE, 1); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_URL, clc.downloadURL); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_TRANSFERTEXT, 0); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_REFERER, va("ioQ3://%s", NET_AdrToString(clc.serverAddress))); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_USERAGENT, va("%s %s", + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_USERAGENT, va("%s %s", Q3_VERSION, qcurl_version())); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_WRITEFUNCTION, + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_WRITEFUNCTION, CL_cURL_CallbackWrite); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_WRITEDATA, &clc.download); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_NOPROGRESS, 0); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_PROGRESSFUNCTION, + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_WRITEDATA, &clc.download); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_NOPROGRESS, 0); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_PROGRESSFUNCTION, CL_cURL_CallbackProgress); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_PROGRESSDATA, NULL); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_FAILONERROR, 1); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_FOLLOWLOCATION, 1); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_MAXREDIRS, 5); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_PROGRESSDATA, NULL); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_FAILONERROR, 1); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_FOLLOWLOCATION, 1); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_MAXREDIRS, 5); clc.downloadCURLM = qcurl_multi_init(); if(!clc.downloadCURLM) { qcurl_easy_cleanup(clc.downloadCURL); From e9e1e25d77bb68ce7700a8c819cc3462492a6053 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Wed, 29 Jul 2015 13:32:00 +0200 Subject: [PATCH 019/480] qcurl_multi_cleanup check --- code/client/cl_curl.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 53dd296d..410f8840 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -177,9 +177,9 @@ void CL_cURL_Shutdown( void ) void CL_cURL_Cleanup(void) { if(clc.downloadCURLM) { - if(clc.downloadCURL) { - CURLMcode result; + CURLMcode result; + if(clc.downloadCURL) { result = qcurl_multi_remove_handle(clc.downloadCURLM, clc.downloadCURL); if(result != CURLM_OK) { @@ -187,7 +187,10 @@ void CL_cURL_Cleanup(void) } qcurl_easy_cleanup(clc.downloadCURL); } - qcurl_multi_cleanup(clc.downloadCURLM); + result = qcurl_multi_cleanup(clc.downloadCURLM); + if(result != CURLM_OK) { + Com_DPrintf("CL_cURL_Cleanup: qcurl_multi_cleanup failed: %s\n", qcurl_multi_strerror(result)); + } clc.downloadCURLM = NULL; clc.downloadCURL = NULL; } From 4e1cf7ac9be6d3629ca9b7ea92686603261bede5 Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Wed, 29 Jul 2015 13:39:27 +0100 Subject: [PATCH 020/480] Return the result from qcurl_easy_setopt_warn --- code/client/cl_curl.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 9a42b4a3..14bf1a01 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -225,6 +225,8 @@ CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, va_list args) if(result != CURLE_OK) { Com_DPrintf("qcurl_easy_setopt failed: %s\n", qcurl_easy_strerror(result)); } + + return result; } void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) From 017af359691c4d417f54036ccec3bcb13bfe5499 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Wed, 29 Jul 2015 16:44:59 +0200 Subject: [PATCH 021/480] Add missing qcurl handle cleanup --- code/client/cl_curl.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 14bf1a01..96b352f8 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -295,6 +295,8 @@ void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) } result = qcurl_multi_add_handle(clc.downloadCURLM, clc.downloadCURL); if(result != CURLM_OK) { + qcurl_easy_cleanup(clc.downloadCURL); + clc.downloadCURL = NULL; Com_Error(ERR_DROP,"CL_cURL_BeginDownload: qcurl_multi_add_handle() failed: %s", qcurl_multi_strerror(result)); return; } From 8fddf5d6cd212f7cc4e5c4c879b977de6379eff6 Mon Sep 17 00:00:00 2001 From: Pan7 Date: Thu, 30 Jul 2015 17:09:51 +0200 Subject: [PATCH 022/480] Fix va_list warning --- code/client/cl_curl.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 96b352f8..3519de06 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -217,11 +217,14 @@ static size_t CL_cURL_CallbackWrite(void *buffer, size_t size, size_t nmemb, return size*nmemb; } -CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, va_list args) +CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, ...) { CURLcode result; + va_list args; + va_start(args, option); result = qcurl_easy_setopt(curl, option, args); + va_end(args); if(result != CURLE_OK) { Com_DPrintf("qcurl_easy_setopt failed: %s\n", qcurl_easy_strerror(result)); } From 49ab0cc05e61a6c1b5862aa8b9495cee4a85b4cc Mon Sep 17 00:00:00 2001 From: Tobias Kuehnhammer Date: Sun, 26 Jul 2015 19:55:17 +0200 Subject: [PATCH 023/480] Fix (unused) watertype checks in PM_WaterMove --- code/game/bg_pmove.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/bg_pmove.c b/code/game/bg_pmove.c index 976a78ed..2d0e8cf3 100644 --- a/code/game/bg_pmove.c +++ b/code/game/bg_pmove.c @@ -483,9 +483,9 @@ static void PM_WaterMove( void ) { // jump = head for surface if ( pm->cmd.upmove >= 10 ) { if (pm->ps->velocity[2] > -300) { - if ( pm->watertype == CONTENTS_WATER ) { + if ( pm->watertype & CONTENTS_WATER ) { pm->ps->velocity[2] = 100; - } else if (pm->watertype == CONTENTS_SLIME) { + } else if ( pm->watertype & CONTENTS_SLIME ) { pm->ps->velocity[2] = 80; } else { pm->ps->velocity[2] = 50; From eaaaf62a167b2a5584046ea1200c38553e35d886 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 18 Aug 2015 17:35:44 -0500 Subject: [PATCH 024/480] Remove MSVC user configuation files --- misc/msvc10/cgame.vcxproj.user | 3 -- misc/msvc10/game.vcxproj.user | 3 -- misc/msvc10/q3_ui.vcxproj.user | 3 -- misc/msvc10/quake3.vcxproj.user | 55 -------------------------------- misc/msvc10/ui.vcxproj.user | 3 -- misc/msvc11/ioq3.v11.suo | Bin 23040 -> 0 bytes 6 files changed, 67 deletions(-) delete mode 100644 misc/msvc10/cgame.vcxproj.user delete mode 100644 misc/msvc10/game.vcxproj.user delete mode 100644 misc/msvc10/q3_ui.vcxproj.user delete mode 100644 misc/msvc10/quake3.vcxproj.user delete mode 100644 misc/msvc10/ui.vcxproj.user delete mode 100644 misc/msvc11/ioq3.v11.suo diff --git a/misc/msvc10/cgame.vcxproj.user b/misc/msvc10/cgame.vcxproj.user deleted file mode 100644 index 695b5c78..00000000 --- a/misc/msvc10/cgame.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/misc/msvc10/game.vcxproj.user b/misc/msvc10/game.vcxproj.user deleted file mode 100644 index 695b5c78..00000000 --- a/misc/msvc10/game.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/misc/msvc10/q3_ui.vcxproj.user b/misc/msvc10/q3_ui.vcxproj.user deleted file mode 100644 index 695b5c78..00000000 --- a/misc/msvc10/q3_ui.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/misc/msvc10/quake3.vcxproj.user b/misc/msvc10/quake3.vcxproj.user deleted file mode 100644 index 04965e00..00000000 --- a/misc/msvc10/quake3.vcxproj.user +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - $(ProjectDir) - WindowsLocalDebugger - - - - - - - $(ProjectDir) - WindowsLocalDebugger - - - $(ProjectDir) - WindowsLocalDebugger - - - - - $(ProjectDir) - WindowsLocalDebugger - - - - - $(ProjectDir) - WindowsLocalDebugger - - - - - $(ProjectDir) - WindowsLocalDebugger - - - - - $(ProjectDir) - WindowsLocalDebugger - - - - - $(ProjectDir) - WindowsLocalDebugger - - - - \ No newline at end of file diff --git a/misc/msvc10/ui.vcxproj.user b/misc/msvc10/ui.vcxproj.user deleted file mode 100644 index 695b5c78..00000000 --- a/misc/msvc10/ui.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/misc/msvc11/ioq3.v11.suo b/misc/msvc11/ioq3.v11.suo deleted file mode 100644 index 2a76f746bb69a6e27897a7134a555291288fd378..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23040 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 From 4ad0e516f55f2cc95645257e0f063c148e3e54a6 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 18 Aug 2015 17:38:43 -0500 Subject: [PATCH 025/480] Ignore MSVC non-project files Ignore auto generated or user configuration for MSVC projects. Note: .user is ignored in Xcode section but applies to MSVC too. Patch by @shearer12345. --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index fff13734..e0b21e44 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,6 @@ profile # Microsoft Visual Studio #################### -*.sdf \ No newline at end of file +*.sdf +*.opensdf +*.suo From af30a0e70a1b4e3119c7076bf622ce4b6c0d6771 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 18 Aug 2015 17:57:12 -0500 Subject: [PATCH 026/480] Update msvc10 renderer filenames (copied from msvc11) --- misc/msvc10/quake3.vcxproj | 70 ++++++---- misc/msvc10/quake3.vcxproj.filters | 207 ++++++++++++++++------------- 2 files changed, 155 insertions(+), 122 deletions(-) diff --git a/misc/msvc10/quake3.vcxproj b/misc/msvc10/quake3.vcxproj index 5966503d..b1790cf9 100644 --- a/misc/msvc10/quake3.vcxproj +++ b/misc/msvc10/quake3.vcxproj @@ -976,6 +976,41 @@ %(PreprocessorDefinitions) %(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + + + @@ -1695,35 +1730,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1781,6 +1787,12 @@ + + + + + + diff --git a/misc/msvc10/quake3.vcxproj.filters b/misc/msvc10/quake3.vcxproj.filters index 4a471966..e1789455 100644 --- a/misc/msvc10/quake3.vcxproj.filters +++ b/misc/msvc10/quake3.vcxproj.filters @@ -31,18 +31,18 @@ {e35bc6f6-1102-4c5c-a650-b7139842f45e} - - {c82e323c-9a35-41ea-9f28-ee0c1e15c7ba} - - - {0ee0a9cb-f315-480b-b7c7-9b1f0d15db54} - {78e83da0-aef9-489d-a068-e484f9f114da} {89531515-ab90-4808-b464-28319ea749c5} + + {6df83ba6-3829-4dba-be13-b88e502e2643} + + + {a0272781-b682-44ec-919d-b349861756d3} + @@ -456,93 +456,6 @@ botlib\Source Files - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - - - renderer\Source Files - speex @@ -681,6 +594,96 @@ zlib + + renderercommon + + + renderercommon + + + renderercommon + + + renderercommon + + + renderercommon + + + renderercommon + + + renderercommon + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + + + renderergl1 + @@ -884,6 +887,24 @@ speex + + renderercommon + + + renderercommon + + + renderercommon + + + renderercommon + + + renderercommon + + + renderergl1 + From beddd710d283bc13a6b94e79ea53123253689b58 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 18 Aug 2015 18:08:40 -0500 Subject: [PATCH 027/480] Fix msvc11 x86_64 runtime --- misc/msvc11/quake3.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/msvc11/quake3.vcxproj b/misc/msvc11/quake3.vcxproj index 1c26fda8..f35402ea 100644 --- a/misc/msvc11/quake3.vcxproj +++ b/misc/msvc11/quake3.vcxproj @@ -447,7 +447,7 @@ ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) true - MultiThreaded + MultiThreadedDLL true From d021150e04659eeccd2da7e8d0d459e408f00c6b Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 18 Aug 2015 18:12:52 -0500 Subject: [PATCH 028/480] Fix mscv11 libcurl include path --- misc/msvc11/quake3.vcxproj | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/misc/msvc11/quake3.vcxproj b/misc/msvc11/quake3.vcxproj index f35402ea..fc58216c 100644 --- a/misc/msvc11/quake3.vcxproj +++ b/misc/msvc11/quake3.vcxproj @@ -149,18 +149,6 @@ ioquake3.$(PlatformShortName) ioquake3.$(PlatformShortName) - - ..\..\code\libcurl-7.35.0;$(IncludePath) - - - ..\..\code\libcurl-7.35.0;$(IncludePath) - - - ..\..\code\libcurl-7.35.0;$(IncludePath) - - - ..\..\code\libcurl-7.35.0;$(IncludePath) - NDEBUG;%(PreprocessorDefinitions) @@ -174,7 +162,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) true MultiThreadedDLL @@ -228,7 +216,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) true MultiThreaded @@ -281,7 +269,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -337,7 +325,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -394,7 +382,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) true MultiThreadedDLL @@ -444,7 +432,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) true MultiThreadedDLL @@ -492,7 +480,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -548,7 +536,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) MultiThreadedDebugDLL From 24c7563478c75ab9644b772d58775dd2b14a7e40 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 18 Aug 2015 18:14:06 -0500 Subject: [PATCH 029/480] Copy msvc11 build changes to msvc10 --- misc/msvc10/cgame.vcxproj | 2 ++ misc/msvc10/game.vcxproj | 2 ++ misc/msvc10/q3_ui.vcxproj | 1 + misc/msvc10/quake3.vcxproj | 26 +++++++++++++++----------- misc/msvc10/ui.vcxproj | 1 + 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/misc/msvc10/cgame.vcxproj b/misc/msvc10/cgame.vcxproj index 3206f749..1f099bdd 100644 --- a/misc/msvc10/cgame.vcxproj +++ b/misc/msvc10/cgame.vcxproj @@ -277,6 +277,7 @@ $(IntDir)$(TargetName).lib MachineX86 + false @@ -469,6 +470,7 @@ $(IntDir)$(TargetName).lib MachineX86 + false diff --git a/misc/msvc10/game.vcxproj b/misc/msvc10/game.vcxproj index 207b6cec..99fa92a6 100644 --- a/misc/msvc10/game.vcxproj +++ b/misc/msvc10/game.vcxproj @@ -180,6 +180,7 @@ $(IntDir)$(TargetName).lib MachineX86 + false @@ -276,6 +277,7 @@ $(IntDir)$(TargetName).lib MachineX86 + false diff --git a/misc/msvc10/q3_ui.vcxproj b/misc/msvc10/q3_ui.vcxproj index cde14875..e73ef4b4 100644 --- a/misc/msvc10/q3_ui.vcxproj +++ b/misc/msvc10/q3_ui.vcxproj @@ -468,6 +468,7 @@ $(IntDir)uix86.lib MachineX86 + false diff --git a/misc/msvc10/quake3.vcxproj b/misc/msvc10/quake3.vcxproj index b1790cf9..c506898a 100644 --- a/misc/msvc10/quake3.vcxproj +++ b/misc/msvc10/quake3.vcxproj @@ -154,10 +154,10 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) true - MultiThreaded + MultiThreadedDLL true @@ -189,6 +189,7 @@ MachineX86 libcmt.lib + false Post build processing.. @@ -207,7 +208,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) true MultiThreaded @@ -260,7 +261,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -298,6 +299,7 @@ MachineX86 + false Post build processing.. @@ -315,7 +317,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -372,10 +374,10 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) true - MultiThreaded + MultiThreadedDLL true @@ -407,6 +409,7 @@ MachineX86 libcmt.lib + false @@ -421,10 +424,10 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) true - MultiThreaded + MultiThreadedDLL true @@ -469,7 +472,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -507,6 +510,7 @@ MachineX86 + false Post build processing.. @@ -524,7 +528,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) MultiThreadedDebugDLL diff --git a/misc/msvc10/ui.vcxproj b/misc/msvc10/ui.vcxproj index c0173217..9a449337 100644 --- a/misc/msvc10/ui.vcxproj +++ b/misc/msvc10/ui.vcxproj @@ -472,6 +472,7 @@ $(IntDir)uix86.lib MachineX86 + false From 40e9a3147071914cc6af11c04029f01ef888d0f4 Mon Sep 17 00:00:00 2001 From: shearer12345 Date: Mon, 17 Aug 2015 14:14:05 +0100 Subject: [PATCH 030/480] Make msvc10/11 use UseOfMfc false and CharacterSet "NotSet" --- misc/msvc10/cgame.vcxproj | 8 ++++++++ misc/msvc10/game.vcxproj | 8 ++++++++ misc/msvc10/q3_ui.vcxproj | 16 ++++++++-------- misc/msvc10/quake3.vcxproj | 16 ++++++++++++---- misc/msvc10/ui.vcxproj | 16 ++++++++-------- misc/msvc11/cgame.vcxproj | 8 ++++++++ misc/msvc11/game.vcxproj | 8 ++++++++ misc/msvc11/q3_ui.vcxproj | 16 ++++++++-------- misc/msvc11/quake3.vcxproj | 16 ++++++++++++---- misc/msvc11/ui.vcxproj | 16 ++++++++-------- 10 files changed, 88 insertions(+), 40 deletions(-) diff --git a/misc/msvc10/cgame.vcxproj b/misc/msvc10/cgame.vcxproj index 1f099bdd..5f497a8f 100644 --- a/misc/msvc10/cgame.vcxproj +++ b/misc/msvc10/cgame.vcxproj @@ -42,34 +42,42 @@ DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet diff --git a/misc/msvc10/game.vcxproj b/misc/msvc10/game.vcxproj index 99fa92a6..5b336b35 100644 --- a/misc/msvc10/game.vcxproj +++ b/misc/msvc10/game.vcxproj @@ -41,34 +41,42 @@ DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet DynamicLibrary false + NotSet diff --git a/misc/msvc10/q3_ui.vcxproj b/misc/msvc10/q3_ui.vcxproj index e73ef4b4..552c43c0 100644 --- a/misc/msvc10/q3_ui.vcxproj +++ b/misc/msvc10/q3_ui.vcxproj @@ -41,42 +41,42 @@ DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet diff --git a/misc/msvc10/quake3.vcxproj b/misc/msvc10/quake3.vcxproj index c506898a..c07f9e39 100644 --- a/misc/msvc10/quake3.vcxproj +++ b/misc/msvc10/quake3.vcxproj @@ -41,34 +41,42 @@ Application false + NotSet Application false + NotSet Application - Static + false + NotSet Application - Static + false + NotSet Application false + NotSet Application false + NotSet Application - Static + false + NotSet Application - Static + false + NotSet diff --git a/misc/msvc10/ui.vcxproj b/misc/msvc10/ui.vcxproj index 9a449337..e4526762 100644 --- a/misc/msvc10/ui.vcxproj +++ b/misc/msvc10/ui.vcxproj @@ -41,42 +41,42 @@ DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet DynamicLibrary false - MultiByte + NotSet diff --git a/misc/msvc11/cgame.vcxproj b/misc/msvc11/cgame.vcxproj index 1ba9da22..64896270 100644 --- a/misc/msvc11/cgame.vcxproj +++ b/misc/msvc11/cgame.vcxproj @@ -42,41 +42,49 @@ DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 diff --git a/misc/msvc11/game.vcxproj b/misc/msvc11/game.vcxproj index 0bb8f32f..04243ae7 100644 --- a/misc/msvc11/game.vcxproj +++ b/misc/msvc11/game.vcxproj @@ -41,41 +41,49 @@ DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 DynamicLibrary false + NotSet v110 diff --git a/misc/msvc11/q3_ui.vcxproj b/misc/msvc11/q3_ui.vcxproj index 97c32685..0c4eab1e 100644 --- a/misc/msvc11/q3_ui.vcxproj +++ b/misc/msvc11/q3_ui.vcxproj @@ -41,49 +41,49 @@ DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 diff --git a/misc/msvc11/quake3.vcxproj b/misc/msvc11/quake3.vcxproj index fc58216c..38f19060 100644 --- a/misc/msvc11/quake3.vcxproj +++ b/misc/msvc11/quake3.vcxproj @@ -41,41 +41,49 @@ Application false + NotSet v110 Application false + NotSet v110 Application - Static + false + NotSet v110 Application - Static + false + NotSet v110 Application false + NotSet v110 Application false + NotSet v110 Application - Static + false + NotSet v110 Application - Static + false + NotSet v110 diff --git a/misc/msvc11/ui.vcxproj b/misc/msvc11/ui.vcxproj index 0df23449..bed8ec2f 100644 --- a/misc/msvc11/ui.vcxproj +++ b/misc/msvc11/ui.vcxproj @@ -41,49 +41,49 @@ DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 DynamicLibrary false - MultiByte + NotSet v110 From 1d83dcca3ec593a56dc92b831430fb12291c9bd8 Mon Sep 17 00:00:00 2001 From: shearer12345 Date: Mon, 17 Aug 2015 12:16:18 +0100 Subject: [PATCH 031/480] Update msvc10/11 for SDL2 update AdditionalIncludeDirectories to use SDL2 update AdditionalDependencies to use SDL2 add AdditionalLibraryDirectory to SDL2 libs set sub-system as console --- misc/msvc10/quake3.vcxproj | 56 ++++++++++++++++++++++---------------- misc/msvc11/quake3.vcxproj | 56 ++++++++++++++++++++++---------------- 2 files changed, 64 insertions(+), 48 deletions(-) diff --git a/misc/msvc10/quake3.vcxproj b/misc/msvc10/quake3.vcxproj index c07f9e39..899e0076 100644 --- a/misc/msvc10/quake3.vcxproj +++ b/misc/msvc10/quake3.vcxproj @@ -162,7 +162,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) true MultiThreadedDLL @@ -183,14 +183,14 @@ 0x0409 - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true false $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false @@ -198,6 +198,7 @@ MachineX86 libcmt.lib false + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) Post build processing.. @@ -216,7 +217,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) true MultiThreaded @@ -237,20 +238,21 @@ 0x0409 - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true false $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false libcmt.lib false + ..\..\code\libs\win64;%(AdditionalLibraryDirectories) Post build processing.. @@ -269,7 +271,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -292,7 +294,7 @@ ..\winquake.res - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true @@ -301,13 +303,14 @@ $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false MachineX86 false + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) Post build processing.. @@ -325,7 +328,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -349,7 +352,7 @@ ..\winquake.res - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true @@ -358,11 +361,12 @@ $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false + ..\..\code\libs\win64;%(AdditionalLibraryDirectories) Post build processing.. @@ -382,7 +386,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) true MultiThreadedDLL @@ -403,14 +407,14 @@ 0x0409 - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true false $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false @@ -418,6 +422,7 @@ MachineX86 libcmt.lib false + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) @@ -432,7 +437,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) true MultiThreadedDLL @@ -453,19 +458,20 @@ 0x0409 - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true false $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false libcmt.lib + ..\..\code\libs\win64;%(AdditionalLibraryDirectories) @@ -480,7 +486,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -503,14 +509,14 @@ ..\winquake.res - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true true $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false @@ -519,6 +525,7 @@ false + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) Post build processing.. @@ -536,7 +543,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -559,18 +566,19 @@ ..\winquake.res - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true true $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false + ..\..\code\libs\win64;%(AdditionalLibraryDirectories) Post build processing.. diff --git a/misc/msvc11/quake3.vcxproj b/misc/msvc11/quake3.vcxproj index 38f19060..cb79d6f0 100644 --- a/misc/msvc11/quake3.vcxproj +++ b/misc/msvc11/quake3.vcxproj @@ -170,7 +170,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) true MultiThreadedDLL @@ -191,14 +191,14 @@ 0x0409 - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true false $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false @@ -206,6 +206,7 @@ MachineX86 libcmt.lib false + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) Post build processing.. @@ -224,7 +225,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) true MultiThreaded @@ -245,20 +246,21 @@ 0x0409 - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true false $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false libcmt.lib false + ..\..\code\libs\win64;%(AdditionalLibraryDirectories) Post build processing.. @@ -277,7 +279,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -300,7 +302,7 @@ ..\winquake.res - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true @@ -309,13 +311,14 @@ $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false MachineX86 false + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) Post build processing.. @@ -333,7 +336,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -357,7 +360,7 @@ ..\winquake.res - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true @@ -366,11 +369,12 @@ $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false + ..\..\code\libs\win64;%(AdditionalLibraryDirectories) Post build processing.. @@ -390,7 +394,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) true MultiThreadedDLL @@ -411,14 +415,14 @@ 0x0409 - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true false $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false @@ -426,6 +430,7 @@ MachineX86 libcmt.lib false + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) @@ -440,7 +445,7 @@ MaxSpeed AnySuitable - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;%(PreprocessorDefinitions) true MultiThreadedDLL @@ -461,19 +466,20 @@ 0x0409 - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true false $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false libcmt.lib + ..\..\code\libs\win64;%(AdditionalLibraryDirectories) @@ -488,7 +494,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -511,14 +517,14 @@ ..\winquake.res - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true true $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false @@ -527,6 +533,7 @@ false + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) Post build processing.. @@ -544,7 +551,7 @@ Disabled - ..\..\code\SDL12\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) _WIN32;WIN32;_WIN64;__WIN64__;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;USE_INTERNAL_JPEG;HAVE_CONFIG_H;MISSIONPACK;%(PreprocessorDefinitions) MultiThreadedDebugDLL @@ -567,18 +574,19 @@ ..\winquake.res - user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDLmain.lib;SDL.lib;OpenGL32.lib;%(AdditionalDependencies) + user32.lib;gdi32.lib;advapi32.lib;winmm.lib;psapi.lib;wsock32.lib;ws2_32.lib;dxguid.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;%(AdditionalDependencies) $(OutDir)$(TargetName)$(TargetExt) true true $(IntDir)quake3.pdb true $(IntDir)quake3.map - Windows + Console 8388608 false + ..\..\code\libs\win64;%(AdditionalLibraryDirectories) Post build processing.. From d64a75f3cb5cb0465cd38001bd67600bcd508d67 Mon Sep 17 00:00:00 2001 From: shearer12345 Date: Mon, 17 Aug 2015 15:17:53 +0100 Subject: [PATCH 032/480] add post-build event for msvc10/11 to copy SDL2.dll to build folder --- misc/msvc10/quake3.vcxproj | 16 ++++++++++------ misc/msvc11/quake3.vcxproj | 16 ++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/misc/msvc10/quake3.vcxproj b/misc/msvc10/quake3.vcxproj index 899e0076..fbeb07d8 100644 --- a/misc/msvc10/quake3.vcxproj +++ b/misc/msvc10/quake3.vcxproj @@ -201,8 +201,8 @@ ..\..\code\libs\win32;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- release-TA" + copy SDL2.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win32\SDL2.dll" "$(TargetDir)" @@ -313,8 +313,8 @@ ..\..\code\libs\win32;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- debug" + copy SDL2.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win32\SDL2.dll" "$(TargetDir)" @@ -424,6 +424,10 @@ false ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + + copy SDL2.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win32\SDL2.dll" "$(TargetDir)" + @@ -528,8 +532,8 @@ ..\..\code\libs\win32;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- debug-TA" + copy SDL2.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win32\SDL2.dll" "$(TargetDir)" diff --git a/misc/msvc11/quake3.vcxproj b/misc/msvc11/quake3.vcxproj index cb79d6f0..280c2e47 100644 --- a/misc/msvc11/quake3.vcxproj +++ b/misc/msvc11/quake3.vcxproj @@ -209,8 +209,8 @@ ..\..\code\libs\win32;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- release-TA" + copy SDL2.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win32\SDL2.dll" "$(TargetDir)" @@ -321,8 +321,8 @@ ..\..\code\libs\win32;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- debug" + copy SDL2.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win32\SDL2.dll" "$(TargetDir)" @@ -432,6 +432,10 @@ false ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + + copy SDL2.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win32\SDL2.dll" "$(TargetDir)" + @@ -536,8 +540,8 @@ ..\..\code\libs\win32;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- debug-TA" + copy SDL2.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win32\SDL2.dll" "$(TargetDir)" From b5e9e1357af54296976bf27c1bf110b550efb737 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 18 Aug 2015 20:03:37 -0500 Subject: [PATCH 033/480] Make msvc10/11 x86_64 copy SDL264.dll --- misc/msvc10/quake3.vcxproj | 16 ++++++++++------ misc/msvc11/quake3.vcxproj | 16 ++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/misc/msvc10/quake3.vcxproj b/misc/msvc10/quake3.vcxproj index fbeb07d8..db5e143d 100644 --- a/misc/msvc10/quake3.vcxproj +++ b/misc/msvc10/quake3.vcxproj @@ -255,8 +255,8 @@ ..\..\code\libs\win64;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- release-TA" + copy SDL264.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win64\SDL264.dll" "$(TargetDir)" @@ -369,8 +369,8 @@ ..\..\code\libs\win64;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- debug" + copy SDL264.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win64\SDL264.dll" "$(TargetDir)" @@ -477,6 +477,10 @@ libcmt.lib ..\..\code\libs\win64;%(AdditionalLibraryDirectories) + + copy SDL264.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win64\SDL264.dll" "$(TargetDir)" + @@ -585,8 +589,8 @@ ..\..\code\libs\win64;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- debug-TA" + copy SDL264.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win64\SDL264.dll" "$(TargetDir)" diff --git a/misc/msvc11/quake3.vcxproj b/misc/msvc11/quake3.vcxproj index 280c2e47..0720aa71 100644 --- a/misc/msvc11/quake3.vcxproj +++ b/misc/msvc11/quake3.vcxproj @@ -263,8 +263,8 @@ ..\..\code\libs\win64;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- release-TA" + copy SDL264.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win64\SDL264.dll" "$(TargetDir)" @@ -377,8 +377,8 @@ ..\..\code\libs\win64;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- debug" + copy SDL264.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win64\SDL264.dll" "$(TargetDir)" @@ -485,6 +485,10 @@ libcmt.lib ..\..\code\libs\win64;%(AdditionalLibraryDirectories) + + copy SDL264.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win64\SDL264.dll" "$(TargetDir)" + @@ -593,8 +597,8 @@ ..\..\code\libs\win64;%(AdditionalLibraryDirectories) - Post build processing.. - rem bash -c "perl ./unix/cons -- debug-TA" + copy SDL264.dll + xcopy /Y /S "$(SolutionDir)..\..\code\libs\win64\SDL264.dll" "$(TargetDir)" From 1c628c0fe5d4425e93cffe6c8cb9ec0387226653 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Wed, 19 Aug 2015 13:40:12 -0500 Subject: [PATCH 034/480] Update headers in VS (10 and 11) projects So VS doesn't always want to rebuild. Reported by @shearer12345. --- misc/msvc10/cgame.vcxproj | 1 + misc/msvc10/cgame.vcxproj.filters | 3 ++ misc/msvc10/game.vcxproj | 18 +++---- misc/msvc10/game.vcxproj.filters | 54 +++++++++---------- misc/msvc10/q3_ui.vcxproj | 17 ++++-- misc/msvc10/q3_ui.vcxproj.filters | 11 ++-- misc/msvc10/quake3.vcxproj | 33 +++++------- misc/msvc10/quake3.vcxproj.filters | 87 ++++++++++++------------------ misc/msvc10/ui.vcxproj | 12 ++--- misc/msvc10/ui.vcxproj.filters | 21 ++++---- misc/msvc11/cgame.vcxproj | 1 + misc/msvc11/cgame.vcxproj.filters | 3 ++ misc/msvc11/game.vcxproj | 18 +++---- misc/msvc11/game.vcxproj.filters | 54 +++++++++---------- misc/msvc11/q3_ui.vcxproj | 17 ++++-- misc/msvc11/q3_ui.vcxproj.filters | 11 ++-- misc/msvc11/quake3.vcxproj | 33 +++++------- misc/msvc11/quake3.vcxproj.filters | 87 ++++++++++++------------------ misc/msvc11/ui.vcxproj | 12 ++--- misc/msvc11/ui.vcxproj.filters | 21 ++++---- 20 files changed, 236 insertions(+), 278 deletions(-) diff --git a/misc/msvc10/cgame.vcxproj b/misc/msvc10/cgame.vcxproj index 5f497a8f..5dcc6f3d 100644 --- a/misc/msvc10/cgame.vcxproj +++ b/misc/msvc10/cgame.vcxproj @@ -1122,6 +1122,7 @@ + diff --git a/misc/msvc10/cgame.vcxproj.filters b/misc/msvc10/cgame.vcxproj.filters index 44bfbbbc..d2425d51 100644 --- a/misc/msvc10/cgame.vcxproj.filters +++ b/misc/msvc10/cgame.vcxproj.filters @@ -115,5 +115,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/misc/msvc10/game.vcxproj b/misc/msvc10/game.vcxproj index 5b336b35..25456a0c 100644 --- a/misc/msvc10/game.vcxproj +++ b/misc/msvc10/game.vcxproj @@ -1251,17 +1251,17 @@ - - - - - - - - + + + + + + + + - + diff --git a/misc/msvc10/game.vcxproj.filters b/misc/msvc10/game.vcxproj.filters index 1e7135c6..d12945cc 100644 --- a/misc/msvc10/game.vcxproj.filters +++ b/misc/msvc10/game.vcxproj.filters @@ -139,39 +139,12 @@ Header Files - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - Header Files Header Files - - Header Files - Header Files @@ -199,5 +172,32 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + \ No newline at end of file diff --git a/misc/msvc10/q3_ui.vcxproj b/misc/msvc10/q3_ui.vcxproj index 552c43c0..444ff14b 100644 --- a/misc/msvc10/q3_ui.vcxproj +++ b/misc/msvc10/q3_ui.vcxproj @@ -1801,20 +1801,31 @@ - + true true true true - + + true + true + true + true + + + true + true + true + true + true true true true - + true true true diff --git a/misc/msvc10/q3_ui.vcxproj.filters b/misc/msvc10/q3_ui.vcxproj.filters index 66153a2d..89c347a3 100644 --- a/misc/msvc10/q3_ui.vcxproj.filters +++ b/misc/msvc10/q3_ui.vcxproj.filters @@ -151,15 +151,18 @@ Header Files + + Header Files + - - Header Files - Header Files - + + Header Files + + Header Files diff --git a/misc/msvc10/quake3.vcxproj b/misc/msvc10/quake3.vcxproj index db5e143d..2479b36e 100644 --- a/misc/msvc10/quake3.vcxproj +++ b/misc/msvc10/quake3.vcxproj @@ -1816,43 +1816,34 @@ - - - + - - - - - + - - - - - - - - - - - - - + + + + + + + + + + diff --git a/misc/msvc10/quake3.vcxproj.filters b/misc/msvc10/quake3.vcxproj.filters index e1789455..d7afa0c6 100644 --- a/misc/msvc10/quake3.vcxproj.filters +++ b/misc/msvc10/quake3.vcxproj.filters @@ -713,9 +713,6 @@ Header Files - - Header Files - Header Files @@ -734,12 +731,6 @@ Header Files - - Header Files - - - Header Files - Header Files @@ -752,15 +743,6 @@ Header Files - - Header Files - - - Header Files - - - Header Files - Header Files @@ -770,45 +752,9 @@ Header Files - - Header Files - Resource Files - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - botlib\Header Files @@ -905,6 +851,39 @@ renderergl1 + + Header Files + + + Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + diff --git a/misc/msvc10/ui.vcxproj b/misc/msvc10/ui.vcxproj index e4526762..5c276f1a 100644 --- a/misc/msvc10/ui.vcxproj +++ b/misc/msvc10/ui.vcxproj @@ -785,7 +785,7 @@ true true - + true true true @@ -797,19 +797,13 @@ true true - + true true true true - - true - true - true - true - - + true true true diff --git a/misc/msvc10/ui.vcxproj.filters b/misc/msvc10/ui.vcxproj.filters index 875ff0ef..65a24684 100644 --- a/misc/msvc10/ui.vcxproj.filters +++ b/misc/msvc10/ui.vcxproj.filters @@ -49,21 +49,9 @@ Header Files - - Header Files - Header Files - - Header Files - - - Header Files - - - Header Files - Header Files @@ -73,5 +61,14 @@ Header Files + + Header Files + + + Header Files + + + Header Files + \ No newline at end of file diff --git a/misc/msvc11/cgame.vcxproj b/misc/msvc11/cgame.vcxproj index 64896270..50395b5c 100644 --- a/misc/msvc11/cgame.vcxproj +++ b/misc/msvc11/cgame.vcxproj @@ -1130,6 +1130,7 @@ + diff --git a/misc/msvc11/cgame.vcxproj.filters b/misc/msvc11/cgame.vcxproj.filters index 44bfbbbc..d2425d51 100644 --- a/misc/msvc11/cgame.vcxproj.filters +++ b/misc/msvc11/cgame.vcxproj.filters @@ -115,5 +115,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/misc/msvc11/game.vcxproj b/misc/msvc11/game.vcxproj index 04243ae7..649fd539 100644 --- a/misc/msvc11/game.vcxproj +++ b/misc/msvc11/game.vcxproj @@ -1259,17 +1259,17 @@ - - - - - - - - + + + + + + + + - + diff --git a/misc/msvc11/game.vcxproj.filters b/misc/msvc11/game.vcxproj.filters index 1e7135c6..d12945cc 100644 --- a/misc/msvc11/game.vcxproj.filters +++ b/misc/msvc11/game.vcxproj.filters @@ -139,39 +139,12 @@ Header Files - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - Header Files Header Files - - Header Files - Header Files @@ -199,5 +172,32 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + \ No newline at end of file diff --git a/misc/msvc11/q3_ui.vcxproj b/misc/msvc11/q3_ui.vcxproj index 0c4eab1e..c3f6865d 100644 --- a/misc/msvc11/q3_ui.vcxproj +++ b/misc/msvc11/q3_ui.vcxproj @@ -1809,20 +1809,31 @@ - + true true true true - + + true + true + true + true + + + true + true + true + true + true true true true - + true true true diff --git a/misc/msvc11/q3_ui.vcxproj.filters b/misc/msvc11/q3_ui.vcxproj.filters index 66153a2d..89c347a3 100644 --- a/misc/msvc11/q3_ui.vcxproj.filters +++ b/misc/msvc11/q3_ui.vcxproj.filters @@ -151,15 +151,18 @@ Header Files + + Header Files + - - Header Files - Header Files - + + Header Files + + Header Files diff --git a/misc/msvc11/quake3.vcxproj b/misc/msvc11/quake3.vcxproj index 0720aa71..18f39821 100644 --- a/misc/msvc11/quake3.vcxproj +++ b/misc/msvc11/quake3.vcxproj @@ -1824,43 +1824,34 @@ - - - + - - - - - + - - - - - - - - - - - - - + + + + + + + + + + diff --git a/misc/msvc11/quake3.vcxproj.filters b/misc/msvc11/quake3.vcxproj.filters index e1789455..d7afa0c6 100644 --- a/misc/msvc11/quake3.vcxproj.filters +++ b/misc/msvc11/quake3.vcxproj.filters @@ -713,9 +713,6 @@ Header Files - - Header Files - Header Files @@ -734,12 +731,6 @@ Header Files - - Header Files - - - Header Files - Header Files @@ -752,15 +743,6 @@ Header Files - - Header Files - - - Header Files - - - Header Files - Header Files @@ -770,45 +752,9 @@ Header Files - - Header Files - Resource Files - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - - - jpeg\Header Files - botlib\Header Files @@ -905,6 +851,39 @@ renderergl1 + + Header Files + + + Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + + + jpeg\Header Files + diff --git a/misc/msvc11/ui.vcxproj b/misc/msvc11/ui.vcxproj index bed8ec2f..ccf108be 100644 --- a/misc/msvc11/ui.vcxproj +++ b/misc/msvc11/ui.vcxproj @@ -793,7 +793,7 @@ true true - + true true true @@ -805,19 +805,13 @@ true true - + true true true true - - true - true - true - true - - + true true true diff --git a/misc/msvc11/ui.vcxproj.filters b/misc/msvc11/ui.vcxproj.filters index 875ff0ef..65a24684 100644 --- a/misc/msvc11/ui.vcxproj.filters +++ b/misc/msvc11/ui.vcxproj.filters @@ -49,21 +49,9 @@ Header Files - - Header Files - Header Files - - Header Files - - - Header Files - - - Header Files - Header Files @@ -73,5 +61,14 @@ Header Files + + Header Files + + + Header Files + + + Header Files + \ No newline at end of file From f4aa39adc1bc9b7946316bd2589c353a47874d27 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 25 Aug 2015 16:22:16 -0500 Subject: [PATCH 035/480] Remove unused define CG_FONT_THRESHOLD --- code/cgame/cg_local.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/cgame/cg_local.h b/code/cgame/cg_local.h index 4c4f6eaa..d78fad72 100644 --- a/code/cgame/cg_local.h +++ b/code/cgame/cg_local.h @@ -31,10 +31,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // If you absolutely need something stored, it can either be kept // by the server in the server stored userinfos, or stashed in a cvar. -#ifdef MISSIONPACK -#define CG_FONT_THRESHOLD 0.1 -#endif - #define POWERUP_BLINKS 5 #define POWERUP_BLINK_TIME 1000 From 4667210e1dc8df7d972c18bf411ac1263f678a45 Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Fri, 28 Aug 2015 10:36:46 -0700 Subject: [PATCH 036/480] more helpful error message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Can’t find your pak0.pk3? Here’s where we tried looking. --- code/qcommon/files.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/qcommon/files.c b/code/qcommon/files.c index 376eaad9..20f1e71b 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -2743,7 +2743,7 @@ void FS_Path_f( void ) { searchpath_t *s; int i; - Com_Printf ("Current search path:\n"); + Com_Printf ("We tried looking in the current search path:\n"); for (s = fs_searchpaths; s; s = s->next) { if (s->pack) { Com_Printf ("%s (%i files)\n", s->pack->pakFilename, s->pack->numfiles); From ede113b7b00cbc72eb1895e1ecd11271c3a39962 Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Fri, 28 Aug 2015 11:08:01 -0700 Subject: [PATCH 037/480] Githalytics seems to have stopped being a thing. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 071c46b8..a6e9b3c5 100644 --- a/README.md +++ b/README.md @@ -788,4 +788,3 @@ Significant contributions from * Aaron Gyes -[![githalytics.com alpha](https://cruel-carlota.pagodabox.com/6d196bd663b47049a25dcb8caef95949 "githalytics.com")](http://githalytics.com/ioquake/ioq3) From 80a61f5b30f19b2a139458cf5a958e9c92153c67 Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Fri, 28 Aug 2015 14:26:32 -0700 Subject: [PATCH 038/480] Moving large chunks of README to wiki step 1 --- README.md | 129 ------------------------------------------------------ 1 file changed, 129 deletions(-) diff --git a/README.md b/README.md index a6e9b3c5..96987800 100644 --- a/README.md +++ b/README.md @@ -356,86 +356,6 @@ really it can only wait for a multiple of 5ms, i.e. 5, 10, 15, 20... ms. In this case you can always revert back to the old behaviour by setting the cvar com_busyWait to 1. -## Using HTTP/FTP Download Support (Server) - -You can enable redirected downloads on your server even if it's not -an ioquake3 server. You simply need to use the 'sets' command to put -the sv_dlURL cvar into your SERVERINFO string and ensure sv_allowDownloads -is set to 1 - -sv_dlURL is the base of the URL that contains your custom .pk3 files -the client will append both fs_game and the filename to the end of -this value. For example, if you have sv_dlURL set to -`"http://ioquake3.org"`, fs_game is `"baseq3"`, and the client is -missing `"test.pk3"`, it will attempt to download from the URL -`"http://ioquake3.org/baseq3/test.pk3"` - -sv_allowDownload's value is now a bitmask made up of the following -flags: - - * 1 - ENABLE - * 4 - do not use UDP downloads - * 8 - do not ask the client to disconnect when using HTTP/FTP - -Server operators who are concerned about potential "leeching" from their -HTTP servers from other ioquake3 servers can make use of the HTTP_REFERER -that ioquake3 sets which is `"ioQ3://{SERVER_IP}:{SERVER_PORT}"`. For, -example, Apache's mod_rewrite can restrict access based on HTTP_REFERER. - -On a sidenote, downloading via UDP has been improved and yields higher data -rates now. You can configure the maximum bandwidth for UDP downloads via the -cvar sv_dlRate. Due to system-specific limits the download rate is capped -at about 1 Mbyte/s per client, so curl downloading may still be faster. - -## Using HTTP/FTP Download Support (Client) - -Simply setting cl_allowDownload to 1 will enable HTTP/FTP downloads -assuming ioquake3 was compiled with USE_CURL=1 (the default). -like sv_allowDownload, cl_allowDownload also uses a bitmask value -supporting the following flags: - - * 1 - ENABLE - * 2 - do not use HTTP/FTP downloads - * 4 - do not use UDP downloads - -When ioquake3 is built with USE_CURL_DLOPEN=1 (default on some platforms), -it will use the value of the cvar cl_cURLLib as the filename of the cURL -library to dynamically load. - -## Multiuser Support on Windows systems -On Windows, all user specific files such as autogenerated configuration, -demos, videos, screenshots, and autodownloaded pk3s are now saved in a -directory specific to the user who is running ioquake3. - -On NT-based such as Windows XP, this is usually a directory named: - - C:\Documents and Settings\%USERNAME%\Application Data\Quake3\ - -Windows 95, Windows 98, and Windows ME will use a directory like: - - C:\Windows\Application Data\Quake3 - -in single-user mode, or: - - C:\Windows\Profiles\%USERNAME%\Application Data\Quake3 - -if multiple logins have been enabled. - -In order to access this directory more easily, the installer may create a -Shortcut which has its target set to: - - %APPDATA%\Quake3\ - -This Shortcut would work for all users on the system regardless of the -locale settings. Unfortunately, this environment variable is only -present on Windows NT based systems. - -You can revert to the old single-user behaviour by setting the fs_homepath -cvar to the directory where ioquake3 is installed. For example: - - ioquake3.exe +set fs_homepath "c:\ioquake3" - -Note that this cvar MUST be set as a command line parameter. ## SDL Keyboard Differences @@ -635,55 +555,6 @@ not prohibit commercial exploitation and all assets (e.g. textures, sounds, maps) created by yourself are your property and can be sold like every other game you find in stores. -## Network protocols - -There are now two cvars that give you some degree of freedom over the reported -protocol versions between clients and servers: "com_protocol" and -"com_legacyprotocol". -The reason for this is that some standalone games increased the protocol -number even though nothing really changed in their protocol and the ioquake3 -engine is still fully compatible. - -In order to harden the network protocol against UDP spoofing attacks a new -network protocol was introduced that defends against such attacks. -Unfortunately, this protocol will be incompatible to the original quake3 1.32c -which is the latest official release from id. -Luckily, ioquake3 has backwards compatibility, on the client as well as on the -server. This means ioquake3 players can play on old servers just as ioquake3 -servers are able to service old clients. - -The cvar "com_protocol" denotes the protocol version for the new hardened -protocol, whereas the "com_legacyprotocol" cvar denotes the protocol version -for the legacy protocol. -If the value for "com_protocol" and "com_legacyprotocol" is identical, then -the legacy protocol is always used. If "com_legacyprotocol" is set to 0, then -support for the legacy protocol is disabled. - -Mods that use a standalone engine obviously do not require dual protocol -support, and it is turned off if the engine is compiled with STANDALONE per -default. If you desire backwards compatibility to older versions of your -game you can still enable it in q_shared.h by defining -LEGACY_PROTOCOL. - -## cl_guid Support - -cl_guid is a cvar which is part of the client's USERINFO string. Its value -is a 32 character string made up of [a-f] and [0-9] characters. This -value is pseudo-unique for every player. Id's Quake 3 Arena client also -sets cl_guid, but only if Punkbuster is enabled on the client. - -If cl_guidServerUniq is non-zero (the default), then this value is also -pseudo-unique for each server a client connects to (based on IP:PORT of -the server). - -The purpose of cl_guid is to add an identifier for each player on -a server. This value can be reset by the client at any time so it's not -useful for blocking access. However, it can have at least two uses in -your mod's game code: - - 1. improve logging to allow statistical tools to index players by more - than just name - 2. granting some weak admin rights to players without requiring passwords ## PNG support From 752b9bafa87f617da550c392cd9c6731459ea8df Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Fri, 28 Aug 2015 14:30:55 -0700 Subject: [PATCH 039/480] Point to the moved information --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 96987800..a5c3e17e 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,8 @@ The original id software readme that accompanied the Q3 source release has been renamed to id-readme.txt so as to prevent confusion. Please refer to the web-site for updated status. +More documentation is on: +http://wiki.ioquake3.org/ # Compilation and installation From 11a65db8bb52e20d378066d4528cb794f98f5f4b Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Fri, 28 Aug 2015 14:45:36 -0700 Subject: [PATCH 040/480] Removing more large chunks of outdated text --- README.md | 131 ++---------------------------------------------------- 1 file changed, 4 insertions(+), 127 deletions(-) diff --git a/README.md b/README.md index a5c3e17e..426e5c95 100644 --- a/README.md +++ b/README.md @@ -327,124 +327,6 @@ The defaults for these variables differ depending on the target platform. ``` -# README for Users - -## Using shared libraries instead of qvm - -To force Q3 to use shared libraries instead of qvms run it with the following -parameters: `+set sv_pure 0 +set vm_cgame 0 +set vm_game 0 +set vm_ui 0` - -## Using Demo Data Files - -Copy demoq3/pak0.pk3 from the demo installer to your baseq3 directory. The -qvm files in this pak0.pk3 will not work, so you have to use the native -shared libraries or qvms from this project. To use the new qvms, they must be -put into a pk3 file. A pk3 file is just a zip file, so any compression tool -that can create such files will work. The shared libraries should already be -in the correct place. Use the instructions above to use them. - -Please bear in mind that you will not be able to play online using the demo -data, nor is it something that we like to spend much time maintaining or -supporting. - -## Help! Ioquake3 won't give me an fps of X anymore when setting com_maxfps! - -Ioquake3 now uses the select() system call to wait for the rendering of the -next frame when com_maxfps was hit. This will improve your CPU load -considerably in these cases. However, not all systems may support a -granularity for its timing functions that is required to perform this waiting -correctly. For instance, ioquake3 tells select() to wait 2 milliseconds, but -really it can only wait for a multiple of 5ms, i.e. 5, 10, 15, 20... ms. -In this case you can always revert back to the old behaviour by setting the -cvar com_busyWait to 1. - - -## SDL Keyboard Differences - -ioquake3 clients have different keyboard behaviour compared to the original -Quake3 clients. - - * SDL > 1.2.9 does not support disabling dead key recognition. In order to - send dead key characters (e.g. ~, ', `, and ^), you must key a Space (or - sometimes the same character again) after the character to send it on - many international keyboard layouts. - - * The SDL client supports many more keys than the original Quake3 client. - For example the keys: "Windows", "SysReq", "ScrollLock", and "Break". - For non-US keyboards, all of the so called "World" keys are now supported - as well as F13, F14, F15, and the country-specific mode/meta keys. - -On many international layouts the default console toggle keys are also dead -keys, meaning that dropping the console potentially results in -unintentionally initiating the keying of a dead key. Furthermore SDL 1.2's -dead key support is broken by design and Q3 doesn't support non-ASCII text -entry, so the chances are you won't get the correct character anyway. - -If you use such a keyboard layout, you can set the cvar cl_consoleKeys. This -is a space delimited list of key names that will toggle the console. The key -names are the usual Q3 names e.g. "~", "`", "c", "BACKSPACE", "PAUSE", -"WINDOWS" etc. It's also possible to use ASCII characters, by hexadecimal -number. Some example values for cl_consoleKeys: - - "~ ` 0x7e 0x60" Toggle on ~ or ` (the default) - "WINDOWS" Toggle on the Windows key - "c" Toggle on the c key - "0x43" Toggle on the C character (Shift-c) - "PAUSE F1 PGUP" Toggle on the Pause, F1 or Page Up keys - -Note that when you elect a set of console keys or characters, they cannot -then be used for binding, nor will they generate characters when entering -text. Also, in addition to the nominated console keys, Shift-ESC is hard -coded to always toggle the console. - -## QuakeLive mouse acceleration -(patch and this text written by TTimo from id) - -I've been using an experimental mouse acceleration code for a while, and -decided to make it available to everyone. Don't be too worried if you don't -understand the explanations below, this is mostly intended for advanced -players: -To enable it, set cl_mouseAccelStyle 1 (0 is the default/legacy behavior) - -New style is controlled with 3 cvars: - -sensitivity -cl_mouseAccel -cl_mouseAccelOffset - -The old code (cl_mouseAccelStyle 0) can be difficult to calibrate because if -you have a base sensitivity setup, as soon as you set a non zero acceleration -your base sensitivity at low speeds will change as well. The other problem -with style 0 is that you are stuck on a square (power of two) acceleration -curve. - -The new code tries to solve both problems: - -Once you setup your sensitivity to feel comfortable and accurate enough for -low mouse deltas with no acceleration (cl_mouseAccel 0), you can start -increasing cl_mouseAccel and tweaking cl_mouseAccelOffset to get the -amplification you want for high deltas with little effect on low mouse deltas. - -cl_mouseAccel is a power value. Should be >= 1, 2 will be the same power curve -as style 0. The higher the value, the faster the amplification grows with the -mouse delta. - -cl_mouseAccelOffset sets how much base mouse delta will be doubled by -acceleration. The closer to zero you bring it, the more acceleration will -happen at low speeds. This is also very useful if you are changing to a new -mouse with higher dpi, if you go from 500 to 1000 dpi, you can divide your -cl_mouseAccelOffset by two to keep the same overall 'feel' (you will likely -gain in precision when you do that, but that is not related to mouse -acceleration). - -Mouse acceleration is tricky to configure, and when you do you'll have to -re-learn your aiming. But you will find that it's very much forth it in the -long run. - -If you try the new acceleration code and start using it, I'd be very -interested by your feedback. - - # README for Developers ## pk3dir @@ -591,18 +473,13 @@ directory, this restriction is lifted. # Contributing -Please send all patches to bugzilla (https://bugzilla.icculus.org), or join the -mailing list (http://lists.ioquake.org/listinfo.cgi/ioquake3-ioquake.org) and -submit your patch there. The best case scenario is that you submit your patch -to bugzilla, and then post the URL to the mailing list. +Please send all patches to bugzilla (https://bugzilla.icculus.org), or as a GitHub pull request and +submit your patch there. The focus for ioq3 is to develop a stable base suitable for further development -and provide players with the same Quake 3 experience they've had for years. As -such ioq3 does not have any significant graphical enhancements and none are -planned at this time. However, improved graphics and sound patches will be -accepted as long as they are entirely optional, do not require new media and -are off by default. +and provide players with the same Quake 3 experience they've had for years. +We do have graphical improvements with the new renderer, but they are off by default. # Building Official Installers From 87e0bf6eaf1dda4480529548582285d7a8c67c67 Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Fri, 28 Aug 2015 18:19:29 -0700 Subject: [PATCH 041/480] Better language, less tense --- code/qcommon/files.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/qcommon/files.c b/code/qcommon/files.c index 20f1e71b..d89d8fbd 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -2743,7 +2743,7 @@ void FS_Path_f( void ) { searchpath_t *s; int i; - Com_Printf ("We tried looking in the current search path:\n"); + Com_Printf ("We are looking in the current search path:\n"); for (s = fs_searchpaths; s; s = s->next) { if (s->pack) { Com_Printf ("%s (%i files)\n", s->pack->pakFilename, s->pack->numfiles); From ce2b8db294875ed27a0ca3a4bffa4611c89f109f Mon Sep 17 00:00:00 2001 From: Dion Williams Date: Mon, 7 Sep 2015 11:29:15 +0100 Subject: [PATCH 042/480] Fix Cvar_Unset not notifying cvar_modifiedFlags Upstream: JACoders/OpenJK@9a5e9e87ff2d1302261978fa3f1adafb851bd6d6 --- code/qcommon/cvar.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/qcommon/cvar.c b/code/qcommon/cvar.c index 0b21fa71..f07705db 100644 --- a/code/qcommon/cvar.c +++ b/code/qcommon/cvar.c @@ -1117,6 +1117,9 @@ cvar_t *Cvar_Unset(cvar_t *cv) { cvar_t *next = cv->next; + // note what types of cvars have been modified (userinfo, archive, serverinfo, systeminfo) + cvar_modifiedFlags |= cv->flags; + if(cv->name) Z_Free(cv->name); if(cv->string) From 2917077323ac469ea12bfe4161a4f9e2082e652a Mon Sep 17 00:00:00 2001 From: Dion Williams Date: Mon, 7 Sep 2015 11:32:43 +0100 Subject: [PATCH 043/480] Ensure reads from /dev/urandom are unbuffered Upstream: JACoders/OpenJK@de6a9dfd40065ae9a5a2b0b3ef701feee8dac867 --- code/sys/sys_unix.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index 0cffd4f1..60050931 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -123,6 +123,8 @@ qboolean Sys_RandomBytes( byte *string, int len ) if( !fp ) return qfalse; + setvbuf( fp, NULL, _IONBF, 0 ); // don't buffer reads from /dev/urandom + if( fread( string, sizeof( byte ), len, fp ) != len ) { fclose( fp ); From 566e2a18de19e029acca1f02666cd119ed62a0a8 Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Wed, 9 Sep 2015 22:32:12 +0100 Subject: [PATCH 044/480] Fix wonky va_list usage --- code/client/cl_curl.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 3519de06..4761a115 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -217,14 +217,11 @@ static size_t CL_cURL_CallbackWrite(void *buffer, size_t size, size_t nmemb, return size*nmemb; } -CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, ...) +static CURLcode qcurl_easy_setopt_warn_valist(CURL *curl, CURLoption option, va_list args) { CURLcode result; - va_list args; - va_start(args, option); result = qcurl_easy_setopt(curl, option, args); - va_end(args); if(result != CURLE_OK) { Com_DPrintf("qcurl_easy_setopt failed: %s\n", qcurl_easy_strerror(result)); } @@ -232,6 +229,18 @@ CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, ...) return result; } +CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, ...) +{ + CURLcode result; + + va_list argp; + va_start(argp, option); + result = qcurl_easy_setopt_warn_valist(curl, option, argp); + va_end(argp); + + return result; +} + void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) { CURLMcode result; From ec6916ded5574a98708418742ff0615a0218b8e4 Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Wed, 9 Sep 2015 23:33:36 +0100 Subject: [PATCH 045/480] Fix the wonky fix to the wonky va_list usage --- code/client/cl_curl.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 4761a115..165bd37a 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -217,25 +217,27 @@ static size_t CL_cURL_CallbackWrite(void *buffer, size_t size, size_t nmemb, return size*nmemb; } -static CURLcode qcurl_easy_setopt_warn_valist(CURL *curl, CURLoption option, va_list args) -{ - CURLcode result; - - result = qcurl_easy_setopt(curl, option, args); - if(result != CURLE_OK) { - Com_DPrintf("qcurl_easy_setopt failed: %s\n", qcurl_easy_strerror(result)); - } - - return result; -} - CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, ...) { CURLcode result; va_list argp; va_start(argp, option); - result = qcurl_easy_setopt_warn_valist(curl, option, argp); + + if(option < CURLOPTTYPE_OBJECTPOINT) { + long longValue = va_arg(argp, long); + result = qcurl_easy_setopt_warn(curl, option, longValue); + } else if(option < CURLOPTTYPE_OFF_T) { + void *pointerValue = va_arg(argp, void *); + result = qcurl_easy_setopt_warn(curl, option, pointerValue); + } else { + curl_off_t offsetValue = va_arg(argp, curl_off_t); + result = qcurl_easy_setopt_warn(curl, option, offsetValue); + } + + if(result != CURLE_OK) { + Com_DPrintf("qcurl_easy_setopt failed: %s\n", qcurl_easy_strerror(result)); + } va_end(argp); return result; From b85935d30c4169188753cccb071934225f5fbea0 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Mon, 14 Sep 2015 04:31:45 -0500 Subject: [PATCH 046/480] Fix glyph width calculation in Text_Paint_Limit Text_Width's scale argument will be multiplied by glyphScale, so don't pass useScale that is already multiplied by glyphScale as this makes the scale too big. --- code/cgame/cg_newdraw.c | 2 +- code/ui/ui_main.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/cgame/cg_newdraw.c b/code/cgame/cg_newdraw.c index dc3ed42a..85c8040b 100644 --- a/code/cgame/cg_newdraw.c +++ b/code/cgame/cg_newdraw.c @@ -1223,7 +1223,7 @@ static void CG_Text_Paint_Limit(float *maxX, float x, float y, float scale, vec4 continue; } else { float yadj = useScale * glyph->top; - if (CG_Text_Width(s, useScale, 1) + x > max) { + if (CG_Text_Width(s, scale, 1) + x > max) { *maxX = 0; break; } diff --git a/code/ui/ui_main.c b/code/ui/ui_main.c index a33371d6..8de581a7 100644 --- a/code/ui/ui_main.c +++ b/code/ui/ui_main.c @@ -537,7 +537,7 @@ static void Text_Paint_Limit(float *maxX, float x, float y, float scale, vec4_t continue; } else { float yadj = useScale * glyph->top; - if (Text_Width(s, useScale, 1) + x > max) { + if (Text_Width(s, scale, 1) + x > max) { *maxX = 0; break; } From 3001cacf8970b5333f6c6e7f6fae8c2b3b4452b7 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Wed, 16 Sep 2015 01:43:28 -0500 Subject: [PATCH 047/480] Make add bots menu use standard menu drawing Made add bots menu draw banner and background like remove bots menu. --- code/q3_ui/ui_addbots.c | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/code/q3_ui/ui_addbots.c b/code/q3_ui/ui_addbots.c index 8b9f4487..4fbad9c9 100644 --- a/code/q3_ui/ui_addbots.c +++ b/code/q3_ui/ui_addbots.c @@ -59,10 +59,16 @@ ADD BOTS MENU typedef struct { menuframework_s menu; + + menutext_s banner; + menubitmap_s background; + menubitmap_s arrows; menubitmap_s up; menubitmap_s down; + menutext_s bots[7]; + menulist_s skill; menulist_s team; menubitmap_s go; @@ -215,21 +221,6 @@ static void UI_AddBotsMenu_GetSortedBotNums( void ) { qsort( addBotsMenuInfo.sortedBotNums, addBotsMenuInfo.numBots, sizeof(addBotsMenuInfo.sortedBotNums[0]), UI_AddBotsMenu_SortCompare ); } - -/* -================= -UI_AddBotsMenu_Draw -================= -*/ -static void UI_AddBotsMenu_Draw( void ) { - UI_DrawBannerString( 320, 16, "ADD BOTS", UI_CENTER, color_white ); - UI_DrawNamedPic( 320-233, 240-166, 466, 332, ART_BACKGROUND ); - - // standard menu drawing - Menu_Draw( &addBotsMenuInfo.menu ); -} - - /* ================= UI_AddBotsMenu_Init @@ -266,7 +257,6 @@ static void UI_AddBotsMenu_Init( void ) { gametype = atoi( Info_ValueForKey( info,"g_gametype" ) ); memset( &addBotsMenuInfo, 0 ,sizeof(addBotsMenuInfo) ); - addBotsMenuInfo.menu.draw = UI_AddBotsMenu_Draw; addBotsMenuInfo.menu.fullscreen = qfalse; addBotsMenuInfo.menu.wrapAround = qtrue; addBotsMenuInfo.delay = 1000; @@ -276,6 +266,21 @@ static void UI_AddBotsMenu_Init( void ) { addBotsMenuInfo.numBots = UI_GetNumBots(); count = addBotsMenuInfo.numBots < 7 ? addBotsMenuInfo.numBots : 7; + addBotsMenuInfo.banner.generic.type = MTYPE_BTEXT; + addBotsMenuInfo.banner.generic.x = 320; + addBotsMenuInfo.banner.generic.y = 16; + addBotsMenuInfo.banner.string = "ADD BOTS"; + addBotsMenuInfo.banner.color = color_white; + addBotsMenuInfo.banner.style = UI_CENTER; + + addBotsMenuInfo.background.generic.type = MTYPE_BITMAP; + addBotsMenuInfo.background.generic.name = ART_BACKGROUND; + addBotsMenuInfo.background.generic.flags = QMF_INACTIVE; + addBotsMenuInfo.background.generic.x = 320-233; + addBotsMenuInfo.background.generic.y = 240-166; + addBotsMenuInfo.background.width = 466; + addBotsMenuInfo.background.height = 332; + addBotsMenuInfo.arrows.generic.type = MTYPE_BITMAP; addBotsMenuInfo.arrows.generic.name = ART_ARROWS; addBotsMenuInfo.arrows.generic.flags = QMF_INACTIVE; @@ -370,8 +375,9 @@ static void UI_AddBotsMenu_Init( void ) { UI_AddBotsMenu_GetSortedBotNums(); UI_AddBotsMenu_SetBotNames(); + Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.background ); + Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.banner ); Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.arrows ); - Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.up ); Menu_AddItem( &addBotsMenuInfo.menu, &addBotsMenuInfo.down ); for( n = 0; n < count; n++ ) { From f860a753e005969dfc9a5afcbbb0e64dcaa3c24f Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 17 Sep 2015 02:53:19 -0700 Subject: [PATCH 048/480] Add Steam's Quake 3 Arena dir to game dirs on Windows. --- code/qcommon/files.c | 20 ++++++++++++++++++++ code/qcommon/q_shared.h | 2 ++ code/qcommon/qcommon.h | 1 + code/sys/sys_unix.c | 28 ++++++++++++++++++++++++++++ code/sys/sys_win32.c | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 85 insertions(+) diff --git a/code/qcommon/files.c b/code/qcommon/files.c index d89d8fbd..a0440839 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -250,6 +250,7 @@ static cvar_t *fs_homepath; // Also search the .app bundle for .pk3 files static cvar_t *fs_apppath; #endif +static cvar_t *fs_steampath; static cvar_t *fs_basepath; static cvar_t *fs_basegame; @@ -748,6 +749,21 @@ long FS_SV_FOpenFileRead(const char *filename, fileHandle_t *fp) fsh[f].handleSync = qfalse; } + // Check fs_steampath too + if (!fsh[f].handleFiles.file.o && fs_steampath->string[0]) + { + ospath = FS_BuildOSPath( fs_steampath->string, filename, "" ); + ospath[strlen(ospath)-1] = '\0'; + + if ( fs_debug->integer ) + { + Com_Printf( "FS_SV_FOpenFileRead (fs_steampath): %s\n", ospath ); + } + + fsh[f].handleFiles.file.o = Sys_FOpen( ospath, "rb" ); + fsh[f].handleSync = qfalse; + } + if ( !fsh[f].handleFiles.file.o ) { f = 0; @@ -3280,6 +3296,10 @@ static void FS_Startup( const char *gameName ) fs_gamedirvar = Cvar_Get ("fs_game", "", CVAR_INIT|CVAR_SYSTEMINFO ); // add search path elements in reverse priority order + fs_steampath = Cvar_Get ("fs_steampath", Sys_SteamPath(), CVAR_INIT|CVAR_PROTECTED ); + if (fs_steampath->string[0]) { + FS_AddGameDirectory( fs_steampath->string, gameName ); + } if (fs_basepath->string[0]) { FS_AddGameDirectory( fs_basepath->string, gameName ); } diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index 90996a29..80f8eac7 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -33,6 +33,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define CLIENT_WINDOW_MIN_TITLE "changeme2" #define HOMEPATH_NAME_UNIX ".foo" #define HOMEPATH_NAME_WIN "FooBar" + #define STEAMPATH_NAME "Foo Bar" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN #define GAMENAME_FOR_MASTER "foobar" // must NOT contain whitespace // #define LEGACY_PROTOCOL // You probably don't need this for your standalone game @@ -43,6 +44,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define CLIENT_WINDOW_MIN_TITLE "ioq3" #define HOMEPATH_NAME_UNIX ".q3a" #define HOMEPATH_NAME_WIN "Quake3" + #define STEAMPATH_NAME "Quake 3 Arena" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN #define GAMENAME_FOR_MASTER "Quake3Arena" #define LEGACY_PROTOCOL diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index 62f753e3..0f493ae7 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -1099,6 +1099,7 @@ FILE *Sys_Mkfifo( const char *ospath ); char *Sys_Cwd( void ); void Sys_SetDefaultInstallPath(const char *path); char *Sys_DefaultInstallPath(void); +char *Sys_SteamPath(void); #ifdef MACOS_X char *Sys_DefaultAppPath(void); diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index 60050931..5f7c76b1 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -44,6 +44,9 @@ qboolean stdinIsATTY; // Used to determine where to store user-specific files static char homePath[ MAX_OSPATH ] = { 0 }; +// Used to store the Steam Quake 3 installation path +static char steamPath[ MAX_OSPATH ] = { 0 }; + /* ================== Sys_DefaultHomePath @@ -78,6 +81,31 @@ char *Sys_DefaultHomePath(void) return homePath; } +/* +================ +Sys_SteamPath +================ +*/ +char *Sys_SteamPath( void ) +{ + // Disabled since Steam doesn't let you install Quake 3 on Mac/Linux +#if 0 + char *p; + + if( ( p = getenv( "HOME" ) ) != NULL ) + { +#ifdef MACOS_X + char *steamPathEnd = "/Library/Application Support/Steam/SteamApps/common/" STEAMPATH_NAME; +#else + char *steamPathEnd = "/.steam/steam/SteamApps/common/" STEAMPATH_NAME; +#endif + Com_sprintf(steamPath, sizeof(steamPath), "%s%s", p, steamPathEnd); + } +#endif + + return steamPath; +} + /* ================ Sys_Milliseconds diff --git a/code/sys/sys_win32.c b/code/sys/sys_win32.c index 50d1bb4b..f4e41d5d 100644 --- a/code/sys/sys_win32.c +++ b/code/sys/sys_win32.c @@ -42,6 +42,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // Used to determine where to store user-specific files static char homePath[ MAX_OSPATH ] = { 0 }; +// Used to store the Steam Quake 3 installation path +static char steamPath[ MAX_OSPATH ] = { 0 }; + #ifndef DEDICATED static UINT timerResolution = 0; #endif @@ -126,6 +129,37 @@ char *Sys_DefaultHomePath( void ) return homePath; } +/* +================ +Sys_SteamPath +================ +*/ +char *Sys_SteamPath( void ) +{ + HKEY steamRegKey; + + if (!RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Valve\\Steam", 0, KEY_QUERY_VALUE, &steamRegKey)) + { + DWORD pathLen = MAX_OSPATH; + + if (RegQueryValueEx(steamRegKey, "SteamPath", NULL, NULL, (LPBYTE)steamPath, &pathLen)) + if (RegQueryValueEx(steamRegKey, "InstallPath", NULL, NULL, (LPBYTE)steamPath, &pathLen)) + steamPath[0] = '\0'; + + if (steamPath[0]) + { + if (pathLen == MAX_OSPATH) + pathLen--; + + steamPath[pathLen] = '\0'; + + Q_strcat(steamPath, MAX_OSPATH, "\\SteamApps\\common\\" STEAMPATH_NAME ); + } + } + + return steamPath; +} + /* ================ Sys_Milliseconds From 5e09f20cd4dcabd0e54d4365d2a8886251b0ad53 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Thu, 17 Sep 2015 18:46:01 -0500 Subject: [PATCH 049/480] Use correct array size for facets in cm_patch.c --- code/qcommon/cm_patch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/qcommon/cm_patch.c b/code/qcommon/cm_patch.c index 6f46239d..e4b90002 100644 --- a/code/qcommon/cm_patch.c +++ b/code/qcommon/cm_patch.c @@ -418,7 +418,7 @@ static int numPlanes; static patchPlane_t planes[MAX_PATCH_PLANES]; static int numFacets; -static facet_t facets[MAX_PATCH_PLANES]; //maybe MAX_FACETS ?? +static facet_t facets[MAX_FACETS]; #define NORMAL_EPSILON 0.0001 #define DIST_EPSILON 0.02 From 68ab4e9548e62dbed881f4afbef08fc92e04f63d Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sun, 20 Sep 2015 18:50:36 -0500 Subject: [PATCH 050/480] Early out of Cmd_CompleteArgument and Cmd_SetCommandCompletionFunc Reported by Ensiform. --- code/qcommon/cmd.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/qcommon/cmd.c b/code/qcommon/cmd.c index 717701db..45122e07 100644 --- a/code/qcommon/cmd.c +++ b/code/qcommon/cmd.c @@ -667,6 +667,7 @@ void Cmd_SetCommandCompletionFunc( const char *command, completionFunc_t complet for( cmd = cmd_functions; cmd; cmd = cmd->next ) { if( !Q_stricmp( command, cmd->name ) ) { cmd->complete = complete; + return; } } } @@ -743,8 +744,11 @@ void Cmd_CompleteArgument( const char *command, char *args, int argNum ) { cmd_function_t *cmd; for( cmd = cmd_functions; cmd; cmd = cmd->next ) { - if( !Q_stricmp( command, cmd->name ) && cmd->complete ) { - cmd->complete( args, argNum ); + if( !Q_stricmp( command, cmd->name ) ) { + if ( cmd->complete ) { + cmd->complete( args, argNum ); + } + return; } } } From 750fdc0e43138eb4850974386fbcae2eac919019 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 22 Sep 2015 19:04:18 -0500 Subject: [PATCH 051/480] Align indent of defines at top of q_shared.h to 4 space tabs --- code/qcommon/q_shared.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index 80f8eac7..024d4128 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -27,24 +27,24 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // A user mod should never modify this file #ifdef STANDALONE - #define PRODUCT_NAME "iofoo3" - #define BASEGAME "foobar" - #define CLIENT_WINDOW_TITLE "changeme" - #define CLIENT_WINDOW_MIN_TITLE "changeme2" + #define PRODUCT_NAME "iofoo3" + #define BASEGAME "foobar" + #define CLIENT_WINDOW_TITLE "changeme" + #define CLIENT_WINDOW_MIN_TITLE "changeme2" #define HOMEPATH_NAME_UNIX ".foo" - #define HOMEPATH_NAME_WIN "FooBar" - #define STEAMPATH_NAME "Foo Bar" + #define HOMEPATH_NAME_WIN "FooBar" + #define STEAMPATH_NAME "Foo Bar" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN #define GAMENAME_FOR_MASTER "foobar" // must NOT contain whitespace // #define LEGACY_PROTOCOL // You probably don't need this for your standalone game #else - #define PRODUCT_NAME "ioq3" - #define BASEGAME "baseq3" - #define CLIENT_WINDOW_TITLE "ioquake3" - #define CLIENT_WINDOW_MIN_TITLE "ioq3" + #define PRODUCT_NAME "ioq3" + #define BASEGAME "baseq3" + #define CLIENT_WINDOW_TITLE "ioquake3" + #define CLIENT_WINDOW_MIN_TITLE "ioq3" #define HOMEPATH_NAME_UNIX ".q3a" - #define HOMEPATH_NAME_WIN "Quake3" - #define STEAMPATH_NAME "Quake 3 Arena" + #define HOMEPATH_NAME_WIN "Quake3" + #define STEAMPATH_NAME "Quake 3 Arena" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN #define GAMENAME_FOR_MASTER "Quake3Arena" #define LEGACY_PROTOCOL From 7e96fd9cb641cf841f38aece0c4187afc295224c Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 22 Sep 2015 19:25:16 -0500 Subject: [PATCH 052/480] Make steam path optional at compile time for standalone games --- code/qcommon/q_shared.h | 4 ++-- code/sys/sys_unix.c | 2 +- code/sys/sys_win32.c | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index 024d4128..8f82348f 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -33,8 +33,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define CLIENT_WINDOW_MIN_TITLE "changeme2" #define HOMEPATH_NAME_UNIX ".foo" #define HOMEPATH_NAME_WIN "FooBar" - #define STEAMPATH_NAME "Foo Bar" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN +// #define STEAMPATH_NAME "Foo Bar" #define GAMENAME_FOR_MASTER "foobar" // must NOT contain whitespace // #define LEGACY_PROTOCOL // You probably don't need this for your standalone game #else @@ -44,8 +44,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define CLIENT_WINDOW_MIN_TITLE "ioq3" #define HOMEPATH_NAME_UNIX ".q3a" #define HOMEPATH_NAME_WIN "Quake3" - #define STEAMPATH_NAME "Quake 3 Arena" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN + #define STEAMPATH_NAME "Quake 3 Arena" #define GAMENAME_FOR_MASTER "Quake3Arena" #define LEGACY_PROTOCOL #endif diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index 5f7c76b1..cf980eba 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -89,7 +89,7 @@ Sys_SteamPath char *Sys_SteamPath( void ) { // Disabled since Steam doesn't let you install Quake 3 on Mac/Linux -#if 0 +#if 0 //#ifdef STEAMPATH_NAME char *p; if( ( p = getenv( "HOME" ) ) != NULL ) diff --git a/code/sys/sys_win32.c b/code/sys/sys_win32.c index f4e41d5d..4c08ef7a 100644 --- a/code/sys/sys_win32.c +++ b/code/sys/sys_win32.c @@ -136,6 +136,7 @@ Sys_SteamPath */ char *Sys_SteamPath( void ) { +#ifdef STEAMPATH_NAME HKEY steamRegKey; if (!RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Valve\\Steam", 0, KEY_QUERY_VALUE, &steamRegKey)) @@ -156,6 +157,7 @@ char *Sys_SteamPath( void ) Q_strcat(steamPath, MAX_OSPATH, "\\SteamApps\\common\\" STEAMPATH_NAME ); } } +#endif return steamPath; } From c138659de18e65fe929024462c6c3176c40343d1 Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Thu, 24 Sep 2015 10:59:57 -0700 Subject: [PATCH 053/480] A mac dedicated server script --- misc/osx/start_server.sh | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 misc/osx/start_server.sh diff --git a/misc/osx/start_server.sh b/misc/osx/start_server.sh new file mode 100644 index 00000000..d79b9ae8 --- /dev/null +++ b/misc/osx/start_server.sh @@ -0,0 +1,3 @@ +#!/bin/sh +echo "Edit this script to change the path to ioquake3's dedicated server executable.\n Set the sv_dlURL setting to a url like http://yoursite.com/ioquake3_path for ioquake3 clients to download extra data" +/Applications/ioquake3/ioquake3.app/ioq3ded +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64 From 45162a395fe30d6d73f51eccc3ecbfe7b902f0b6 Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Thu, 24 Sep 2015 11:21:18 -0700 Subject: [PATCH 054/480] Fixed the os x path and now both scripts will take arguments --- misc/linux/start_server.sh | 2 +- misc/osx/start_server.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/linux/start_server.sh b/misc/linux/start_server.sh index 82d28c03..ec4b64b7 100644 --- a/misc/linux/start_server.sh +++ b/misc/linux/start_server.sh @@ -1,3 +1,3 @@ #!/bin/sh echo "Edit this script to change the path to ioquake3's dedicated server executable and which binary if you aren't on x86_64.\n Set the sv_dlURL setting to a url like http://yoursite.com/ioquake3_path for ioquake3 clients to download extra data" -~/ioquake3/ioq3ded.x86_64 +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64 +~/ioquake3/ioq3ded.x86_64 +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64 $@ diff --git a/misc/osx/start_server.sh b/misc/osx/start_server.sh index d79b9ae8..1c605c08 100644 --- a/misc/osx/start_server.sh +++ b/misc/osx/start_server.sh @@ -1,3 +1,3 @@ #!/bin/sh echo "Edit this script to change the path to ioquake3's dedicated server executable.\n Set the sv_dlURL setting to a url like http://yoursite.com/ioquake3_path for ioquake3 clients to download extra data" -/Applications/ioquake3/ioquake3.app/ioq3ded +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64 +/Applications/ioquake3/ioquake3.app/Contents/MacOS/ioq3ded +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64 $@ From e0b58abf53691ff0e54a19867d4af6a873b2af62 Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Thu, 24 Sep 2015 11:26:10 -0700 Subject: [PATCH 055/480] Don't quote me. --- misc/linux/start_server.sh | 2 +- misc/osx/start_server.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/misc/linux/start_server.sh b/misc/linux/start_server.sh index ec4b64b7..da980072 100644 --- a/misc/linux/start_server.sh +++ b/misc/linux/start_server.sh @@ -1,3 +1,3 @@ #!/bin/sh echo "Edit this script to change the path to ioquake3's dedicated server executable and which binary if you aren't on x86_64.\n Set the sv_dlURL setting to a url like http://yoursite.com/ioquake3_path for ioquake3 clients to download extra data" -~/ioquake3/ioq3ded.x86_64 +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64 $@ +~/ioquake3/ioq3ded.x86_64 +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64 "$@" diff --git a/misc/osx/start_server.sh b/misc/osx/start_server.sh index 1c605c08..66a295ff 100644 --- a/misc/osx/start_server.sh +++ b/misc/osx/start_server.sh @@ -1,3 +1,3 @@ #!/bin/sh echo "Edit this script to change the path to ioquake3's dedicated server executable.\n Set the sv_dlURL setting to a url like http://yoursite.com/ioquake3_path for ioquake3 clients to download extra data" -/Applications/ioquake3/ioquake3.app/Contents/MacOS/ioq3ded +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64 $@ +/Applications/ioquake3/ioquake3.app/Contents/MacOS/ioq3ded +set dedicated 2 +set sv_allowDownload 1 +set sv_dlURL "" +set com_hunkmegs 64 "$@" From 3bd7a8d842536cc998d1abae19058ecc17084738 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 25 Sep 2015 04:52:17 -0700 Subject: [PATCH 056/480] Search for mods in steam path as well as home and base paths. --- code/qcommon/files.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/code/qcommon/files.c b/code/qcommon/files.c index a0440839..77dfd295 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -2502,6 +2502,8 @@ int FS_GetModList( char *listbuf, int bufsize ) { int dummy; char **pFiles0 = NULL; char **pFiles1 = NULL; + char **pFiles2 = NULL; + char **pFiles3 = NULL; qboolean bDrop = qfalse; *listbuf = 0; @@ -2509,9 +2511,12 @@ int FS_GetModList( char *listbuf, int bufsize ) { pFiles0 = Sys_ListFiles( fs_homepath->string, NULL, NULL, &dummy, qtrue ); pFiles1 = Sys_ListFiles( fs_basepath->string, NULL, NULL, &dummy, qtrue ); + pFiles2 = Sys_ListFiles( fs_steampath->string, NULL, NULL, &dummy, qtrue ); // we searched for mods in the three paths // it is likely that we have duplicate names now, which we will cleanup below - pFiles = Sys_ConcatenateFileLists( pFiles0, pFiles1 ); + pFiles3 = Sys_ConcatenateFileLists( pFiles0, pFiles1 ); + pFiles = Sys_ConcatenateFileLists( pFiles2, pFiles3 ); + nPotential = Sys_CountFileList(pFiles); for ( i = 0 ; i < nPotential ; i++ ) { @@ -2553,6 +2558,15 @@ int FS_GetModList( char *listbuf, int bufsize ) { Sys_FreeFileList( pPaks ); } + /* try on steam path */ + if ( nPaks <= 0 ) + { + path = FS_BuildOSPath( fs_steampath->string, name, "" ); + nPaks = 0; + pPaks = Sys_ListFiles( path, ".pk3", NULL, &nPaks, qfalse ); + Sys_FreeFileList( pPaks ); + } + if (nPaks > 0) { nLen = strlen(name) + 1; // nLen is the length of the mod path @@ -3320,6 +3334,9 @@ static void FS_Startup( const char *gameName ) // check for additional base game so mods can be based upon other mods if ( fs_basegame->string[0] && Q_stricmp( fs_basegame->string, gameName ) ) { + if (fs_steampath->string[0]) { + FS_AddGameDirectory(fs_steampath->string, fs_basegame->string); + } if (fs_basepath->string[0]) { FS_AddGameDirectory(fs_basepath->string, fs_basegame->string); } @@ -3330,6 +3347,9 @@ static void FS_Startup( const char *gameName ) // check for additional game folder for mods if ( fs_gamedirvar->string[0] && Q_stricmp( fs_gamedirvar->string, gameName ) ) { + if (fs_steampath->string[0]) { + FS_AddGameDirectory(fs_steampath->string, fs_gamedirvar->string); + } if (fs_basepath->string[0]) { FS_AddGameDirectory(fs_basepath->string, fs_gamedirvar->string); } From 2f77a98afee2daf6de9a7e2d304e52e15c40510b Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 25 Sep 2015 04:55:41 -0700 Subject: [PATCH 057/480] Use Windows uninstall path to find Steam Quake 3 install. Thanks Pan- and Ensiform for pointing this out. --- code/qcommon/q_shared.h | 2 ++ code/sys/sys_win32.c | 45 +++++++++++++++++++++++++++++++---------- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/code/qcommon/q_shared.h b/code/qcommon/q_shared.h index 8f82348f..1baa3e1b 100644 --- a/code/qcommon/q_shared.h +++ b/code/qcommon/q_shared.h @@ -35,6 +35,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define HOMEPATH_NAME_WIN "FooBar" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN // #define STEAMPATH_NAME "Foo Bar" +// #define STEAMPATH_APPID "" #define GAMENAME_FOR_MASTER "foobar" // must NOT contain whitespace // #define LEGACY_PROTOCOL // You probably don't need this for your standalone game #else @@ -46,6 +47,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define HOMEPATH_NAME_WIN "Quake3" #define HOMEPATH_NAME_MACOSX HOMEPATH_NAME_WIN #define STEAMPATH_NAME "Quake 3 Arena" + #define STEAMPATH_APPID "2200" #define GAMENAME_FOR_MASTER "Quake3Arena" #define LEGACY_PROTOCOL #endif diff --git a/code/sys/sys_win32.c b/code/sys/sys_win32.c index 4c08ef7a..4771e390 100644 --- a/code/sys/sys_win32.c +++ b/code/sys/sys_win32.c @@ -136,29 +136,52 @@ Sys_SteamPath */ char *Sys_SteamPath( void ) { -#ifdef STEAMPATH_NAME +#if defined(STEAMPATH_NAME) || defined(STEAMPATH_APPID) HKEY steamRegKey; + DWORD pathLen = MAX_OSPATH; + qboolean finishPath = qfalse; +#endif - if (!RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Valve\\Steam", 0, KEY_QUERY_VALUE, &steamRegKey)) +#ifdef STEAMPATH_APPID + if (!steamPath[0] && !RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App " STEAMPATH_APPID, 0, KEY_QUERY_VALUE, &steamRegKey)) { - DWORD pathLen = MAX_OSPATH; + pathLen = MAX_OSPATH; + if (RegQueryValueEx(steamRegKey, "InstallLocation", NULL, NULL, (LPBYTE)steamPath, &pathLen)) + steamPath[0] = '\0'; + } + if (!steamPath[0] && !RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App " STEAMPATH_APPID, 0, KEY_QUERY_VALUE, &steamRegKey)) + { + pathLen = MAX_OSPATH; + if (RegQueryValueEx(steamRegKey, "InstallLocation", NULL, NULL, (LPBYTE)steamPath, &pathLen)) + steamPath[0] = '\0'; + } +#endif + +#ifdef STEAMPATH_NAME + if (!steamPath[0] && !RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Valve\\Steam", 0, KEY_QUERY_VALUE, &steamRegKey)) + { + pathLen = MAX_OSPATH; if (RegQueryValueEx(steamRegKey, "SteamPath", NULL, NULL, (LPBYTE)steamPath, &pathLen)) if (RegQueryValueEx(steamRegKey, "InstallPath", NULL, NULL, (LPBYTE)steamPath, &pathLen)) steamPath[0] = '\0'; if (steamPath[0]) - { - if (pathLen == MAX_OSPATH) - pathLen--; - - steamPath[pathLen] = '\0'; - - Q_strcat(steamPath, MAX_OSPATH, "\\SteamApps\\common\\" STEAMPATH_NAME ); - } + finishPath = qtrue; } #endif + if (steamPath[0]) + { + if (pathLen == MAX_OSPATH) + pathLen--; + + steamPath[pathLen] = '\0'; + + if (finishPath) + Q_strcat(steamPath, MAX_OSPATH, "\\SteamApps\\common\\" STEAMPATH_NAME ); + } + return steamPath; } From c70e10d15ee40c65ab0bb10e4b5756ec688a2d44 Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Fri, 25 Sep 2015 22:49:55 +0100 Subject: [PATCH 058/480] Effectively revert c2e146c1 --- code/client/cl_curl.c | 52 +++++++++++-------------------------------- 1 file changed, 13 insertions(+), 39 deletions(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index 165bd37a..aa604a9d 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -217,32 +217,6 @@ static size_t CL_cURL_CallbackWrite(void *buffer, size_t size, size_t nmemb, return size*nmemb; } -CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, ...) -{ - CURLcode result; - - va_list argp; - va_start(argp, option); - - if(option < CURLOPTTYPE_OBJECTPOINT) { - long longValue = va_arg(argp, long); - result = qcurl_easy_setopt_warn(curl, option, longValue); - } else if(option < CURLOPTTYPE_OFF_T) { - void *pointerValue = va_arg(argp, void *); - result = qcurl_easy_setopt_warn(curl, option, pointerValue); - } else { - curl_off_t offsetValue = va_arg(argp, curl_off_t); - result = qcurl_easy_setopt_warn(curl, option, offsetValue); - } - - if(result != CURLE_OK) { - Com_DPrintf("qcurl_easy_setopt failed: %s\n", qcurl_easy_strerror(result)); - } - va_end(argp); - - return result; -} - void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) { CURLMcode result; @@ -282,23 +256,23 @@ void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) } if(com_developer->integer) - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_VERBOSE, 1); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_URL, clc.downloadURL); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_TRANSFERTEXT, 0); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_REFERER, va("ioQ3://%s", + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_VERBOSE, 1); + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_URL, clc.downloadURL); + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_TRANSFERTEXT, 0); + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_REFERER, va("ioQ3://%s", NET_AdrToString(clc.serverAddress))); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_USERAGENT, va("%s %s", + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_USERAGENT, va("%s %s", Q3_VERSION, qcurl_version())); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_WRITEFUNCTION, + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_WRITEFUNCTION, CL_cURL_CallbackWrite); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_WRITEDATA, &clc.download); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_NOPROGRESS, 0); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_PROGRESSFUNCTION, + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_WRITEDATA, &clc.download); + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_NOPROGRESS, 0); + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_PROGRESSFUNCTION, CL_cURL_CallbackProgress); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_PROGRESSDATA, NULL); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_FAILONERROR, 1); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_FOLLOWLOCATION, 1); - qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_MAXREDIRS, 5); + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_PROGRESSDATA, NULL); + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_FAILONERROR, 1); + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_FOLLOWLOCATION, 1); + qcurl_easy_setopt(clc.downloadCURL, CURLOPT_MAXREDIRS, 5); clc.downloadCURLM = qcurl_multi_init(); if(!clc.downloadCURLM) { qcurl_easy_cleanup(clc.downloadCURL); From 9732f1ba69970c41e942b3234d6f510bf8622b06 Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Sat, 26 Sep 2015 10:54:16 +0100 Subject: [PATCH 059/480] Now with less infinite recursion --- code/client/cl_curl.c | 52 ++++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/code/client/cl_curl.c b/code/client/cl_curl.c index aa604a9d..3ff5a3d8 100644 --- a/code/client/cl_curl.c +++ b/code/client/cl_curl.c @@ -217,6 +217,32 @@ static size_t CL_cURL_CallbackWrite(void *buffer, size_t size, size_t nmemb, return size*nmemb; } +CURLcode qcurl_easy_setopt_warn(CURL *curl, CURLoption option, ...) +{ + CURLcode result; + + va_list argp; + va_start(argp, option); + + if(option < CURLOPTTYPE_OBJECTPOINT) { + long longValue = va_arg(argp, long); + result = qcurl_easy_setopt(curl, option, longValue); + } else if(option < CURLOPTTYPE_OFF_T) { + void *pointerValue = va_arg(argp, void *); + result = qcurl_easy_setopt(curl, option, pointerValue); + } else { + curl_off_t offsetValue = va_arg(argp, curl_off_t); + result = qcurl_easy_setopt(curl, option, offsetValue); + } + + if(result != CURLE_OK) { + Com_DPrintf("qcurl_easy_setopt failed: %s\n", qcurl_easy_strerror(result)); + } + va_end(argp); + + return result; +} + void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) { CURLMcode result; @@ -256,23 +282,23 @@ void CL_cURL_BeginDownload( const char *localName, const char *remoteURL ) } if(com_developer->integer) - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_VERBOSE, 1); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_URL, clc.downloadURL); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_TRANSFERTEXT, 0); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_REFERER, va("ioQ3://%s", + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_VERBOSE, 1); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_URL, clc.downloadURL); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_TRANSFERTEXT, 0); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_REFERER, va("ioQ3://%s", NET_AdrToString(clc.serverAddress))); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_USERAGENT, va("%s %s", + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_USERAGENT, va("%s %s", Q3_VERSION, qcurl_version())); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_WRITEFUNCTION, + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_WRITEFUNCTION, CL_cURL_CallbackWrite); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_WRITEDATA, &clc.download); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_NOPROGRESS, 0); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_PROGRESSFUNCTION, + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_WRITEDATA, &clc.download); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_NOPROGRESS, 0); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_PROGRESSFUNCTION, CL_cURL_CallbackProgress); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_PROGRESSDATA, NULL); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_FAILONERROR, 1); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_FOLLOWLOCATION, 1); - qcurl_easy_setopt(clc.downloadCURL, CURLOPT_MAXREDIRS, 5); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_PROGRESSDATA, NULL); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_FAILONERROR, 1); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_FOLLOWLOCATION, 1); + qcurl_easy_setopt_warn(clc.downloadCURL, CURLOPT_MAXREDIRS, 5); clc.downloadCURLM = qcurl_multi_init(); if(!clc.downloadCURLM) { qcurl_easy_cleanup(clc.downloadCURL); From 1902b6e65903d82ad91424e825dfc2e576d5e410 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sat, 26 Sep 2015 19:26:21 -0500 Subject: [PATCH 060/480] Fix compiling on Windows without Steam path/appid --- code/sys/sys_win32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/sys/sys_win32.c b/code/sys/sys_win32.c index 4771e390..24fe1cf5 100644 --- a/code/sys/sys_win32.c +++ b/code/sys/sys_win32.c @@ -140,7 +140,6 @@ char *Sys_SteamPath( void ) HKEY steamRegKey; DWORD pathLen = MAX_OSPATH; qboolean finishPath = qfalse; -#endif #ifdef STEAMPATH_APPID if (!steamPath[0] && !RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App " STEAMPATH_APPID, 0, KEY_QUERY_VALUE, &steamRegKey)) @@ -181,6 +180,7 @@ char *Sys_SteamPath( void ) if (finishPath) Q_strcat(steamPath, MAX_OSPATH, "\\SteamApps\\common\\" STEAMPATH_NAME ); } +#endif return steamPath; } From 7e0dac7517d3528eecfcf057515abc5ecac33f10 Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Sun, 4 Oct 2015 21:11:24 +0100 Subject: [PATCH 061/480] Fix check for empty rconpassword in CL_Rcon_f --- code/client/cl_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 43f741f7..7d9706fa 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -1820,7 +1820,7 @@ void CL_Rcon_f( void ) { char message[MAX_RCON_MESSAGE]; netadr_t to; - if ( !rcon_client_password->string ) { + if ( !rcon_client_password->string[0] ) { Com_Printf ("You must set 'rconpassword' before\n" "issuing an rcon command.\n"); return; From 7f4b34bf095a4e36d34cbdb2653edf11e7239325 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Mon, 28 Sep 2015 01:12:17 -0500 Subject: [PATCH 062/480] Remove unused define MAC_EVENT_PUMP_MSEC --- code/renderergl1/tr_backend.c | 2 -- code/renderergl2/tr_backend.c | 2 -- 2 files changed, 4 deletions(-) diff --git a/code/renderergl1/tr_backend.c b/code/renderergl1/tr_backend.c index a1122456..41fe47ac 100644 --- a/code/renderergl1/tr_backend.c +++ b/code/renderergl1/tr_backend.c @@ -495,8 +495,6 @@ void RB_BeginDrawingView (void) { } -#define MAC_EVENT_PUMP_MSEC 5 - /* ================== RB_RenderDrawSurfList diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index c8c7200f..fe98d2a3 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -549,8 +549,6 @@ void RB_BeginDrawingView (void) { } -#define MAC_EVENT_PUMP_MSEC 5 - /* ================== RB_RenderDrawSurfList From fad66ae22225890dac05e742078f7cfb7e3475a0 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Wed, 30 Sep 2015 01:26:27 -0500 Subject: [PATCH 063/480] Maybe fix old MSYS when there is an empty for loop Based on ioquake3 svn r1485. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 825307ff..3df83660 100644 --- a/Makefile +++ b/Makefile @@ -1261,7 +1261,7 @@ endif NAKED_TARGETS=$(shell echo $(TARGETS) | sed -e "s!$(B)/!!g") -print_list=@for i in $(1); \ +print_list=-@for i in $(1); \ do \ echo " $$i"; \ done From ce35188acd270c75d766681016ae26fa030b5315 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 16 Oct 2015 03:16:26 -0500 Subject: [PATCH 064/480] Add support for uncompressed image upload flag to OpenGL1 --- code/renderergl1/tr_image.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/renderergl1/tr_image.c b/code/renderergl1/tr_image.c index 7905842b..b131f366 100644 --- a/code/renderergl1/tr_image.c +++ b/code/renderergl1/tr_image.c @@ -557,6 +557,7 @@ static void Upload32( unsigned *data, qboolean mipmap, qboolean picmip, qboolean lightMap, + qboolean allowCompression, int *format, int *pUploadWidth, int *pUploadHeight ) { @@ -692,11 +693,11 @@ static void Upload32( unsigned *data, } else { - if ( glConfig.textureCompression == TC_S3TC_ARB ) + if ( allowCompression && glConfig.textureCompression == TC_S3TC_ARB ) { internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; } - else if ( glConfig.textureCompression == TC_S3TC ) + else if ( allowCompression && glConfig.textureCompression == TC_S3TC ) { internalFormat = GL_RGB4_S3TC; } @@ -892,6 +893,7 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, image->flags & IMGFLAG_MIPMAP, image->flags & IMGFLAG_PICMIP, isLightmap, + !(image->flags & IMGFLAG_NO_COMPRESSION), &image->internalFormat, &image->uploadWidth, &image->uploadHeight ); From 8531162bd9761ce49016b3738ddf394b28f8e462 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 16 Oct 2015 19:18:38 -0500 Subject: [PATCH 065/480] Fix not swapping buffers because out of cmd buffer space Reserve space for end of list and swap buffer commands. These are absolutely required and cannot be dropped. Dropping swap buffer command causes screen to not update and possible crash from drawsurf buffer overflow if not enough cmd buffer space for many continous frames. --- code/renderergl1/tr_cmds.c | 19 +++++++++++++++---- code/renderergl2/tr_cmds.c | 19 +++++++++++++++---- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/code/renderergl1/tr_cmds.c b/code/renderergl1/tr_cmds.c index 00b819ac..19094700 100644 --- a/code/renderergl1/tr_cmds.c +++ b/code/renderergl1/tr_cmds.c @@ -114,19 +114,19 @@ void R_IssuePendingRenderCommands( void ) { /* ============ -R_GetCommandBuffer +R_GetCommandBufferReserved make sure there is enough command space ============ */ -void *R_GetCommandBuffer( int bytes ) { +void *R_GetCommandBufferReserved( int bytes, int reservedBytes ) { renderCommandList_t *cmdList; cmdList = &backEndData->commands; bytes = PAD(bytes, sizeof(void *)); // always leave room for the end of list command - if ( cmdList->used + bytes + 4 > MAX_RENDER_COMMANDS ) { + if ( cmdList->used + bytes + 4 + reservedBytes > MAX_RENDER_COMMANDS ) { if ( bytes > MAX_RENDER_COMMANDS - 4 ) { ri.Error( ERR_FATAL, "R_GetCommandBuffer: bad size %i", bytes ); } @@ -139,6 +139,17 @@ void *R_GetCommandBuffer( int bytes ) { return cmdList->cmds + cmdList->used - bytes; } +/* +============= +R_GetCommandBuffer + +returns NULL if there is not enough space for important commands +============= +*/ +void *R_GetCommandBuffer( int bytes ) { + return R_GetCommandBufferReserved( bytes, sizeof ( swapBuffersCommand_t ) ); +} + /* ============= @@ -454,7 +465,7 @@ void RE_EndFrame( int *frontEndMsec, int *backEndMsec ) { if ( !tr.registered ) { return; } - cmd = R_GetCommandBuffer( sizeof( *cmd ) ); + cmd = R_GetCommandBufferReserved( sizeof( *cmd ), 0 ); if ( !cmd ) { return; } diff --git a/code/renderergl2/tr_cmds.c b/code/renderergl2/tr_cmds.c index 18fd69c3..0f48727d 100644 --- a/code/renderergl2/tr_cmds.c +++ b/code/renderergl2/tr_cmds.c @@ -121,19 +121,19 @@ void R_IssuePendingRenderCommands( void ) { /* ============ -R_GetCommandBuffer +R_GetCommandBufferReserved make sure there is enough command space ============ */ -void *R_GetCommandBuffer( int bytes ) { +void *R_GetCommandBufferReserved( int bytes, int reservedBytes ) { renderCommandList_t *cmdList; cmdList = &backEndData->commands; bytes = PAD(bytes, sizeof(void *)); // always leave room for the end of list command - if ( cmdList->used + bytes + 4 > MAX_RENDER_COMMANDS ) { + if ( cmdList->used + bytes + 4 + reservedBytes > MAX_RENDER_COMMANDS ) { if ( bytes > MAX_RENDER_COMMANDS - 4 ) { ri.Error( ERR_FATAL, "R_GetCommandBuffer: bad size %i", bytes ); } @@ -146,6 +146,17 @@ void *R_GetCommandBuffer( int bytes ) { return cmdList->cmds + cmdList->used - bytes; } +/* +============= +R_GetCommandBuffer + +returns NULL if there is not enough space for important commands +============= +*/ +void *R_GetCommandBuffer( int bytes ) { + return R_GetCommandBufferReserved( bytes, sizeof ( swapBuffersCommand_t ) ); +} + /* ============= @@ -525,7 +536,7 @@ void RE_EndFrame( int *frontEndMsec, int *backEndMsec ) { if ( !tr.registered ) { return; } - cmd = R_GetCommandBuffer( sizeof( *cmd ) ); + cmd = R_GetCommandBufferReserved( sizeof( *cmd ), 0 ); if ( !cmd ) { return; } From e6209f3b7c008d6d6ec933788088510ad04cd2c5 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 16 Oct 2015 20:12:51 -0500 Subject: [PATCH 066/480] Fix crash from reading past end of tr.refdef.drawSurfs The number of draw surfaces was range checked against number of surfaces for the current view but needs to check total for the frame otherwise can read past the end of the tr.refdef.drawSurfs array when there are multiple views. --- code/renderergl1/tr_main.c | 18 ++++++++++-------- code/renderergl2/tr_main.c | 18 ++++++++++-------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/code/renderergl1/tr_main.c b/code/renderergl1/tr_main.c index e33eb952..0e388314 100644 --- a/code/renderergl1/tr_main.c +++ b/code/renderergl1/tr_main.c @@ -1146,13 +1146,6 @@ void R_SortDrawSurfs( drawSurf_t *drawSurfs, int numDrawSurfs ) { return; } - // if we overflowed MAX_DRAWSURFS, the drawsurfs - // wrapped around in the buffer and we will be missing - // the first surfaces, not the last ones - if ( numDrawSurfs > MAX_DRAWSURFS ) { - numDrawSurfs = MAX_DRAWSURFS; - } - // sort the drawsurfs by sort type, then orientation, then shader R_RadixSort( drawSurfs, numDrawSurfs ); @@ -1361,6 +1354,7 @@ or a mirror / remote location */ void R_RenderView (viewParms_t *parms) { int firstDrawSurf; + int numDrawSurfs; if ( parms->viewportWidth <= 0 || parms->viewportHeight <= 0 ) { return; @@ -1383,7 +1377,15 @@ void R_RenderView (viewParms_t *parms) { R_GenerateDrawSurfs(); - R_SortDrawSurfs( tr.refdef.drawSurfs + firstDrawSurf, tr.refdef.numDrawSurfs - firstDrawSurf ); + // if we overflowed MAX_DRAWSURFS, the drawsurfs + // wrapped around in the buffer and we will be missing + // the first surfaces, not the last ones + numDrawSurfs = tr.refdef.numDrawSurfs; + if ( numDrawSurfs > MAX_DRAWSURFS ) { + numDrawSurfs = MAX_DRAWSURFS; + } + + R_SortDrawSurfs( tr.refdef.drawSurfs + firstDrawSurf, numDrawSurfs - firstDrawSurf ); // draw main system development information (surface outlines, etc) R_DebugGraphics(); diff --git a/code/renderergl2/tr_main.c b/code/renderergl2/tr_main.c index 6d397c4a..4c80ad60 100644 --- a/code/renderergl2/tr_main.c +++ b/code/renderergl2/tr_main.c @@ -1820,13 +1820,6 @@ void R_SortDrawSurfs( drawSurf_t *drawSurfs, int numDrawSurfs ) { return; } - // if we overflowed MAX_DRAWSURFS, the drawsurfs - // wrapped around in the buffer and we will be missing - // the first surfaces, not the last ones - if ( numDrawSurfs > MAX_DRAWSURFS ) { - numDrawSurfs = MAX_DRAWSURFS; - } - // sort the drawsurfs by sort type, then orientation, then shader R_RadixSort( drawSurfs, numDrawSurfs ); @@ -2053,6 +2046,7 @@ or a mirror / remote location */ void R_RenderView (viewParms_t *parms) { int firstDrawSurf; + int numDrawSurfs; if ( parms->viewportWidth <= 0 || parms->viewportHeight <= 0 ) { return; @@ -2075,7 +2069,15 @@ void R_RenderView (viewParms_t *parms) { R_GenerateDrawSurfs(); - R_SortDrawSurfs( tr.refdef.drawSurfs + firstDrawSurf, tr.refdef.numDrawSurfs - firstDrawSurf ); + // if we overflowed MAX_DRAWSURFS, the drawsurfs + // wrapped around in the buffer and we will be missing + // the first surfaces, not the last ones + numDrawSurfs = tr.refdef.numDrawSurfs; + if ( numDrawSurfs > MAX_DRAWSURFS ) { + numDrawSurfs = MAX_DRAWSURFS; + } + + R_SortDrawSurfs( tr.refdef.drawSurfs + firstDrawSurf, numDrawSurfs - firstDrawSurf ); // draw main system development information (surface outlines, etc) R_DebugGraphics(); From 81e2b6c0cf1bf8f7cea18035d24edb1ff8ae36ff Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 16 Oct 2015 20:50:25 -0500 Subject: [PATCH 067/480] Fix reserved size for swap buffer command being too small on x86_64 --- code/renderergl1/tr_cmds.c | 2 +- code/renderergl2/tr_cmds.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/renderergl1/tr_cmds.c b/code/renderergl1/tr_cmds.c index 19094700..6a4a319c 100644 --- a/code/renderergl1/tr_cmds.c +++ b/code/renderergl1/tr_cmds.c @@ -147,7 +147,7 @@ returns NULL if there is not enough space for important commands ============= */ void *R_GetCommandBuffer( int bytes ) { - return R_GetCommandBufferReserved( bytes, sizeof ( swapBuffersCommand_t ) ); + return R_GetCommandBufferReserved( bytes, PAD( sizeof( swapBuffersCommand_t ), sizeof(void *) ) ); } diff --git a/code/renderergl2/tr_cmds.c b/code/renderergl2/tr_cmds.c index 0f48727d..79706d25 100644 --- a/code/renderergl2/tr_cmds.c +++ b/code/renderergl2/tr_cmds.c @@ -154,7 +154,7 @@ returns NULL if there is not enough space for important commands ============= */ void *R_GetCommandBuffer( int bytes ) { - return R_GetCommandBufferReserved( bytes, sizeof ( swapBuffersCommand_t ) ); + return R_GetCommandBufferReserved( bytes, PAD( sizeof( swapBuffersCommand_t ), sizeof(void *) ) ); } From 41f83ac8b0a5e6e9b1a80be9ec6f8c143944201f Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sat, 17 Oct 2015 21:57:16 -0500 Subject: [PATCH 068/480] Replace 4 with sizeof( int ) in R_GetCommandBufferReserved --- code/renderergl1/tr_cmds.c | 4 ++-- code/renderergl2/tr_cmds.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/renderergl1/tr_cmds.c b/code/renderergl1/tr_cmds.c index 6a4a319c..89bb88a3 100644 --- a/code/renderergl1/tr_cmds.c +++ b/code/renderergl1/tr_cmds.c @@ -126,8 +126,8 @@ void *R_GetCommandBufferReserved( int bytes, int reservedBytes ) { bytes = PAD(bytes, sizeof(void *)); // always leave room for the end of list command - if ( cmdList->used + bytes + 4 + reservedBytes > MAX_RENDER_COMMANDS ) { - if ( bytes > MAX_RENDER_COMMANDS - 4 ) { + if ( cmdList->used + bytes + sizeof( int ) + reservedBytes > MAX_RENDER_COMMANDS ) { + if ( bytes > MAX_RENDER_COMMANDS - sizeof( int ) ) { ri.Error( ERR_FATAL, "R_GetCommandBuffer: bad size %i", bytes ); } // if we run out of room, just start dropping commands diff --git a/code/renderergl2/tr_cmds.c b/code/renderergl2/tr_cmds.c index 79706d25..254bb0d7 100644 --- a/code/renderergl2/tr_cmds.c +++ b/code/renderergl2/tr_cmds.c @@ -133,8 +133,8 @@ void *R_GetCommandBufferReserved( int bytes, int reservedBytes ) { bytes = PAD(bytes, sizeof(void *)); // always leave room for the end of list command - if ( cmdList->used + bytes + 4 + reservedBytes > MAX_RENDER_COMMANDS ) { - if ( bytes > MAX_RENDER_COMMANDS - 4 ) { + if ( cmdList->used + bytes + sizeof( int ) + reservedBytes > MAX_RENDER_COMMANDS ) { + if ( bytes > MAX_RENDER_COMMANDS - sizeof( int ) ) { ri.Error( ERR_FATAL, "R_GetCommandBuffer: bad size %i", bytes ); } // if we run out of room, just start dropping commands From f663104cfcf2a9ec5078a86283bdb4595ab22cf3 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 2 Dec 2015 17:07:26 -0800 Subject: [PATCH 069/480] Access 32-bit registry key from 64-bit Windows correctly. --- code/sys/sys_win32.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/code/sys/sys_win32.c b/code/sys/sys_win32.c index 24fe1cf5..da7241a7 100644 --- a/code/sys/sys_win32.c +++ b/code/sys/sys_win32.c @@ -142,14 +142,8 @@ char *Sys_SteamPath( void ) qboolean finishPath = qfalse; #ifdef STEAMPATH_APPID - if (!steamPath[0] && !RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App " STEAMPATH_APPID, 0, KEY_QUERY_VALUE, &steamRegKey)) - { - pathLen = MAX_OSPATH; - if (RegQueryValueEx(steamRegKey, "InstallLocation", NULL, NULL, (LPBYTE)steamPath, &pathLen)) - steamPath[0] = '\0'; - } - - if (!steamPath[0] && !RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App " STEAMPATH_APPID, 0, KEY_QUERY_VALUE, &steamRegKey)) + // Assuming Steam is a 32-bit app + if (!steamPath[0] && !RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Steam App " STEAMPATH_APPID, 0, KEY_QUERY_VALUE | KEY_WOW64_32KEY, &steamRegKey)) { pathLen = MAX_OSPATH; if (RegQueryValueEx(steamRegKey, "InstallLocation", NULL, NULL, (LPBYTE)steamPath, &pathLen)) From 2954bdfa655dc18b28ec49378b3ba238677b1da9 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 2 Dec 2015 17:08:40 -0800 Subject: [PATCH 070/480] OpenGL2: automatically load textures with a _s suffix as specular. --- code/renderergl2/tr_shader.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/code/renderergl2/tr_shader.c b/code/renderergl2/tr_shader.c index 9bf2ec20..cad242aa 100644 --- a/code/renderergl2/tr_shader.c +++ b/code/renderergl2/tr_shader.c @@ -2212,12 +2212,33 @@ static void CollapseStagesToLightall(shaderStage_t *diffuse, if (r_specularMapping->integer) { + image_t *diffuseImg; if (specular) { //ri.Printf(PRINT_ALL, ", specularmap %s", specular->bundle[0].image[0]->imgName); diffuse->bundle[TB_SPECULARMAP] = specular->bundle[0]; VectorCopy4(specular->specularScale, diffuse->specularScale); } + else if ((lightmap || useLightVector || useLightVertex) && (diffuseImg = diffuse->bundle[TB_DIFFUSEMAP].image[0])) + { + char specularName[MAX_QPATH]; + image_t *specularImg; + imgFlags_t specularFlags = (diffuseImg->flags & ~(IMGFLAG_GENNORMALMAP | IMGFLAG_SRGB)) | IMGFLAG_NOLIGHTSCALE; + + COM_StripExtension(diffuseImg->imgName, specularName, MAX_QPATH); + Q_strcat(specularName, MAX_QPATH, "_s"); + + specularImg = R_FindImageFile(specularName, IMGTYPE_COLORALPHA, specularFlags); + + if (specularImg) + { + diffuse->bundle[TB_SPECULARMAP] = diffuse->bundle[0]; + diffuse->bundle[TB_SPECULARMAP].numImageAnimations = 0; + diffuse->bundle[TB_SPECULARMAP].image[0] = specularImg; + + VectorSet4(diffuse->specularScale, 1.0f, 1.0f, 1.0f, 1.0f); + } + } } if (tcgen || diffuse->bundle[0].numTexMods) From e5aabdaff61421fce608099c9c9b80d67a3d627a Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 3 Dec 2015 02:44:33 -0800 Subject: [PATCH 071/480] OpenGL2: Remove some rendering options for simplicity. --- code/renderergl2/glsl/lightall_fp.glsl | 224 ++++--------------------- code/renderergl2/tr_glsl.c | 35 ---- code/renderergl2/tr_init.c | 2 - code/renderergl2/tr_local.h | 1 - opengl2-readme.md | 26 +-- 5 files changed, 40 insertions(+), 248 deletions(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index d1182781..c0d2bc80 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -150,156 +150,35 @@ float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap) } #endif -vec3 CalcDiffuse(vec3 diffuseAlbedo, vec3 N, vec3 L, vec3 E, float NE, float NL, float shininess) +vec3 CalcDiffuse(vec3 diffuseAlbedo, float EH, float NH, float r) { - #if defined(USE_OREN_NAYAR) || defined(USE_TRIACE_OREN_NAYAR) - float gamma = dot(E, L) - NE * NL; - float B = 2.22222 + 0.1 * shininess; - - #if defined(USE_OREN_NAYAR) - float A = 1.0 - 1.0 / (2.0 + 0.33 * shininess); - gamma = clamp(gamma, 0.0, 1.0); - #endif - - #if defined(USE_TRIACE_OREN_NAYAR) - float A = 1.0 - 1.0 / (2.0 + 0.65 * shininess); - - if (gamma >= 0.0) - #endif - { - B = max(B * max(NL, NE), EPSILON); - } - - return diffuseAlbedo * (A + gamma / B); - #else +#if defined(USE_BURLEY) + // modified from https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf + float fd90 = -0.5 + EH * EH * r; + float burley = 1.0 + fd90 * 0.04 / NH; + burley *= burley; + return diffuseAlbedo * burley; +#else return diffuseAlbedo; - #endif -} - -vec3 EnvironmentBRDF(float gloss, float NE, vec3 specular) -{ - #if 1 - // from http://blog.selfshadow.com/publications/s2013-shading-course/lazarov/s2013_pbs_black_ops_2_notes.pdf - vec4 t = vec4( 1.0/0.96, 0.475, (0.0275 - 0.25 * 0.04)/0.96,0.25 ) * gloss; - t += vec4( 0.0, 0.0, (0.015 - 0.75 * 0.04)/0.96,0.75 ); - float a0 = t.x * min( t.y, exp2( -9.28 * NE ) ) + t.z; - float a1 = t.w; - return clamp( a0 + specular * ( a1 - a0 ), 0.0, 1.0 ); - #elif 0 - // from http://seblagarde.wordpress.com/2011/08/17/hello-world/ - return specular + CalcFresnel(NE) * clamp(vec3(gloss) - specular, 0.0, 1.0); - #else - // from http://advances.realtimerendering.com/s2011/Lazarov-Physically-Based-Lighting-in-Black-Ops%20%28Siggraph%202011%20Advances%20in%20Real-Time%20Rendering%20Course%29.pptx - return mix(specular.rgb, vec3(1.0), CalcFresnel(NE) / (4.0 - 3.0 * gloss)); - #endif -} - -float CalcBlinn(float NH, float shininess) -{ -#if defined(USE_BLINN) || defined(USE_BLINN_FRESNEL) - // Normalized Blinn-Phong - float norm = shininess * 0.125 + 1.0; -#elif defined(USE_MCAULEY) - // Cook-Torrance as done by Stephen McAuley - // http://blog.selfshadow.com/publications/s2012-shading-course/mcauley/s2012_pbs_farcry3_notes_v2.pdf - float norm = shininess * 0.25 + 0.125; -#elif defined(USE_GOTANDA) - // Neumann-Neumann as done by Yoshiharu Gotanda - // http://research.tri-ace.com/Data/s2012_beyond_CourseNotes.pdf - float norm = shininess * 0.124858 + 0.269182; -#elif defined(USE_LAZAROV) - // Cook-Torrance as done by Dimitar Lazarov - // http://blog.selfshadow.com/publications/s2013-shading-course/lazarov/s2013_pbs_black_ops_2_notes.pdf - float norm = shininess * 0.125 + 0.25; -#else - float norm = 1.0; -#endif - -#if 0 - // from http://seblagarde.wordpress.com/2012/06/03/spherical-gaussien-approximation-for-blinn-phong-phong-and-fresnel/ - float a = shininess + 0.775; - return norm * exp(a * NH - a); -#else - return norm * pow(NH, shininess); #endif } -float CalcGGX(float NH, float gloss) +vec3 EnvironmentBRDF(float r, float NE, vec3 specular) { - // from http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf - float a_sq = exp2(gloss * -13.0 + 1.0); - float d = ((NH * NH) * (a_sq - 1.0) + 1.0); - return a_sq / (d * d); + // from http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf + float v = 1.0 - max(r, NE); + v *= v * v; + return vec3(v) + specular; } -float CalcFresnel(float EH) +vec3 CalcSpecular(vec3 specular, float NH, float NL, float NE, float EH, float r) { -#if 1 - // From http://blog.selfshadow.com/publications/s2013-shading-course/lazarov/s2013_pbs_black_ops_2_notes.pdf - // not accurate, but fast - return exp2(-10.0 * EH); -#elif 0 - // From http://seblagarde.wordpress.com/2012/06/03/spherical-gaussien-approximation-for-blinn-phong-phong-and-fresnel/ - return exp2((-5.55473 * EH - 6.98316) * EH); -#elif 0 - float blend = 1.0 - EH; - float blend2 = blend * blend; - blend *= blend2 * blend2; - - return blend; -#else - return pow(1.0 - EH, 5.0); -#endif -} - -float CalcVisibility(float NH, float NL, float NE, float EH, float gloss) -{ -#if defined(USE_GOTANDA) - // Neumann-Neumann as done by Yoshiharu Gotanda - // http://research.tri-ace.com/Data/s2012_beyond_CourseNotes.pdf - return 1.0 / max(max(NL, NE), EPSILON); -#elif defined(USE_LAZAROV) - // Cook-Torrance as done by Dimitar Lazarov - // http://blog.selfshadow.com/publications/s2013-shading-course/lazarov/s2013_pbs_black_ops_2_notes.pdf - float k = min(1.0, gloss + 0.545); - return 1.0 / (k * (EH * EH - 1.0) + 1.0); -#elif defined(USE_GGX) - float roughness = exp2(gloss * -6.5); - - // Modified from http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf - // NL, NE in numerator factored out from cook-torrance - float k = roughness + 1.0; - k *= k * 0.125; - - float k2 = 1.0 - k; - - float invGeo1 = NL * k2 + k; - float invGeo2 = NE * k2 + k; - - return 1.0 / (invGeo1 * invGeo2); -#else - return 1.0; -#endif -} - - -vec3 CalcSpecular(vec3 specular, float NH, float NL, float NE, float EH, float gloss, float shininess) -{ -#if defined(USE_GGX) - float distrib = CalcGGX(NH, gloss); -#else - float distrib = CalcBlinn(NH, shininess); -#endif - -#if defined(USE_BLINN) - vec3 fSpecular = specular; -#else - vec3 fSpecular = mix(specular, vec3(1.0), CalcFresnel(EH)); -#endif - - float vis = CalcVisibility(NH, NL, NE, EH, gloss); - - return fSpecular * (distrib * vis); + // from http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf + float rr = r*r; + float rrrr = rr*rr; + float d = (NH * NH) * (rrrr - 1.0) + 1.0; + float v = (EH * EH) * (r + 0.5); + return specular * (rrrr / (4.0 * d * d * v)); } @@ -421,14 +300,7 @@ void main() shadowValue *= float(dot(var_Normal.xyz, var_PrimaryLightDir.xyz) > 0.0); #if defined(SHADOWMAP_MODULATE) - //vec3 shadowColor = min(u_PrimaryLightAmbient, lightColor); - vec3 shadowColor = u_PrimaryLightAmbient * lightColor; - - #if 0 - // Only shadow when the world light is parallel to the primary light - shadowValue = 1.0 + (shadowValue - 1.0) * clamp(dot(L, var_PrimaryLightDir.xyz), 0.0, 1.0); - #endif - lightColor = mix(shadowColor, lightColor, shadowValue); + lightColor *= shadowValue * (1.0 - u_PrimaryLightAmbient.r) + u_PrimaryLightAmbient.r; #endif #endif @@ -465,65 +337,39 @@ void main() #if defined(r_materialGamma) diffuse.rgb = pow(diffuse.rgb, vec3(r_materialGamma)); + #if !defined(SPECULAR_IS_METALLIC) specular.rgb = pow(specular.rgb, vec3(r_materialGamma)); + #endif #endif float gloss = specular.a; - float shininess = exp2(gloss * 13.0); + float r = exp2(-3.0 * gloss); #if defined(SPECULAR_IS_METALLIC) - // diffuse is actually base color, and red of specular is metallicness - float metallic = specular.r; + // diffuse is actually base color, and green of specular is metallicness + float metallic = specular.g; - specular.rgb = (0.96 * metallic) * diffuse.rgb + vec3(0.04); + specular.rgb = metallic * diffuse.rgb + vec3(0.04 - 0.04 * metallic); diffuse.rgb *= 1.0 - metallic; #else // adjust diffuse by specular reflectance, to maintain energy conservation diffuse.rgb *= vec3(1.0) - specular.rgb; #endif - reflectance = CalcDiffuse(diffuse.rgb, N, L, E, NE, NL, shininess); - - #if defined(r_deluxeSpecular) || defined(USE_LIGHT_VECTOR) - float adjGloss = gloss; - float adjShininess = shininess; - - #if !defined(USE_LIGHT_VECTOR) - adjGloss *= r_deluxeSpecular; - adjShininess = exp2(adjGloss * 13.0); - #endif - - H = normalize(L + E); - + reflectance = CalcDiffuse(diffuse.rgb, EH, NH, r); + #if defined(USE_SHADOWMAP) && defined(SHADOWMAP_MODULATE) + // bit of a hack, with modulated shadowmaps, add specular to sunlight + H = normalize(var_PrimaryLightDir.xyz + E); EH = clamp(dot(E, H), 0.0, 1.0); NH = clamp(dot(N, H), 0.0, 1.0); - - #if !defined(USE_LIGHT_VECTOR) - reflectance += CalcSpecular(specular.rgb, NH, NL, NE, EH, adjGloss, adjShininess) * r_deluxeSpecular; - #else - reflectance += CalcSpecular(specular.rgb, NH, NL, NE, EH, adjGloss, adjShininess); - #endif + reflectance += shadowValue * CalcSpecular(specular.rgb, NH, NL, NE, EH, r); #endif gl_FragColor.rgb = lightColor * reflectance * (attenuation * NL); - -#if 0 - vec3 aSpecular = EnvironmentBRDF(gloss, NE, specular.rgb); - - // do ambient as two hemisphere lights, one straight up one straight down - float hemiDiffuseUp = N.z * 0.5 + 0.5; - float hemiDiffuseDown = 1.0 - hemiDiffuseUp; - float hemiSpecularUp = mix(hemiDiffuseUp, float(N.z >= 0.0), gloss); - float hemiSpecularDown = 1.0 - hemiSpecularUp; - - gl_FragColor.rgb += ambientColor * 0.75 * (diffuse.rgb * hemiDiffuseUp + aSpecular * hemiSpecularUp); - gl_FragColor.rgb += ambientColor * 0.25 * (diffuse.rgb * hemiDiffuseDown + aSpecular * hemiSpecularDown); -#else gl_FragColor.rgb += ambientColor * (diffuse.rgb + specular.rgb); -#endif #if defined(USE_CUBEMAP) - reflectance = EnvironmentBRDF(gloss, NE, specular.rgb); + reflectance = EnvironmentBRDF(r, NE, specular.rgb); vec3 R = reflect(E, N); @@ -565,8 +411,8 @@ void main() EH2 = clamp(dot(E, H2), 0.0, 1.0); NH2 = clamp(dot(N, H2), 0.0, 1.0); - reflectance = CalcDiffuse(diffuse.rgb, N, L2, E, NE, NL2, shininess); - reflectance += CalcSpecular(specular.rgb, NH2, NL2, NE, EH2, gloss, shininess); + reflectance = CalcDiffuse(diffuse.rgb, EH2, NH2, r); + reflectance += CalcSpecular(specular.rgb, NH2, NL2, NE, EH2, r); lightColor = u_PrimaryLightColor * var_Color.rgb; diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index f526b8c6..3fcb9350 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -1022,9 +1022,6 @@ void GLSL_InitGPUShaders(void) extradefines[0] = '\0'; - if (r_deluxeSpecular->value > 0.000001f) - Q_strcat(extradefines, 1024, va("#define r_deluxeSpecular %f\n", r_deluxeSpecular->value)); - if (r_specularIsMetallic->value) Q_strcat(extradefines, 1024, "#define SPECULAR_IS_METALLIC\n"); @@ -1067,12 +1064,6 @@ void GLSL_InitGPUShaders(void) { Q_strcat(extradefines, 1024, "#define USE_NORMALMAP\n"); - if (r_normalMapping->integer == 2) - Q_strcat(extradefines, 1024, "#define USE_OREN_NAYAR\n"); - - if (r_normalMapping->integer == 3) - Q_strcat(extradefines, 1024, "#define USE_TRIACE_OREN_NAYAR\n"); - #ifdef USE_VERT_TANGENT_SPACE Q_strcat(extradefines, 1024, "#define USE_VERT_TANGENT_SPACE\n"); attribs |= ATTR_TANGENT; @@ -1087,34 +1078,8 @@ void GLSL_InitGPUShaders(void) } if (r_specularMapping->integer) - { Q_strcat(extradefines, 1024, "#define USE_SPECULARMAP\n"); - switch (r_specularMapping->integer) - { - case 1: - default: - Q_strcat(extradefines, 1024, "#define USE_BLINN\n"); - break; - - case 2: - Q_strcat(extradefines, 1024, "#define USE_BLINN_FRESNEL\n"); - break; - - case 3: - Q_strcat(extradefines, 1024, "#define USE_MCAULEY\n"); - break; - - case 4: - Q_strcat(extradefines, 1024, "#define USE_GOTANDA\n"); - break; - - case 5: - Q_strcat(extradefines, 1024, "#define USE_LAZAROV\n"); - break; - } - } - if (r_cubeMapping->integer) Q_strcat(extradefines, 1024, "#define USE_CUBEMAP\n"); } diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 525dfba0..8b4ff9e6 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -142,7 +142,6 @@ cvar_t *r_specularMapping; cvar_t *r_deluxeMapping; cvar_t *r_parallaxMapping; cvar_t *r_cubeMapping; -cvar_t *r_deluxeSpecular; cvar_t *r_specularIsMetallic; cvar_t *r_baseNormalX; cvar_t *r_baseNormalY; @@ -1213,7 +1212,6 @@ void R_Register( void ) r_deluxeMapping = ri.Cvar_Get( "r_deluxeMapping", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_parallaxMapping = ri.Cvar_Get( "r_parallaxMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_cubeMapping = ri.Cvar_Get( "r_cubeMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); - r_deluxeSpecular = ri.Cvar_Get( "r_deluxeSpecular", "0.3", CVAR_ARCHIVE | CVAR_LATCH ); r_specularIsMetallic = ri.Cvar_Get( "r_specularIsMetallic", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_baseNormalX = ri.Cvar_Get( "r_baseNormalX", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); r_baseNormalY = ri.Cvar_Get( "r_baseNormalY", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 21b572f5..9249849b 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1784,7 +1784,6 @@ extern cvar_t *r_specularMapping; extern cvar_t *r_deluxeMapping; extern cvar_t *r_parallaxMapping; extern cvar_t *r_cubeMapping; -extern cvar_t *r_deluxeSpecular; extern cvar_t *r_specularIsMetallic; extern cvar_t *r_baseNormalX; extern cvar_t *r_baseNormalY; diff --git a/opengl2-readme.md b/opengl2-readme.md index ccf89751..8efeec79 100644 --- a/opengl2-readme.md +++ b/opengl2-readme.md @@ -160,24 +160,15 @@ Cvars for HDR and tonemapping: Cvars for advanced material usage: -* `r_normalMapping` - Enable normal mapping for materials that - support it, and also specify advanced - shading techniques. +* `r_normalMapping` - Enable normal maps for materials that + support it. 0 - No. 1 - Yes. (default) - 2 - Yes, and use Oren-Nayar reflectance - model. - 3 - Yes, and use tri-Ace's Oren-Nayar - reflectance model. -* `r_specularMapping` - Enable specular mapping for materials that - support it, and also specify advanced - specular techniques. +* `r_specularMapping` - Enable specular maps for materials that + support it. 0 - No. - 1 - Yes, and use tri-Ace. (default) - 2 - Yes, and use Blinn-Phong. - 3 - Yes, and use Cook-Torrance. - 4 - Yes, and use Torrance-Sparrow. + 1 - Yes. (default) * `r_deluxeMapping` - Enable deluxe mapping. (Map is compiled with light directions.) Even if the map @@ -333,13 +324,6 @@ Cvars that you probably don't care about or shouldn't mess with: 0 - No. 1 - Yes. (default) -* `r_normalAmbient` - Split map light into ambient and directed - portions when doing deluxe mapping. Not - very useful. - 0 - Don't. (default). - 0.3 - 30% ambient, 70% directed. - 1.0 - 100% ambient. - * `r_mergeLightmaps` - Merge the small (128x128) lightmaps into 2 or fewer giant (4096x4096) lightmaps. Easy speedup. From 92d4b20129e81c2f1c69fe663f182ebb788f9bda Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 8 Dec 2015 05:17:05 -0800 Subject: [PATCH 072/480] OpenGL2: Add option in code for alternate overbright method. --- code/renderergl2/tr_bsp.c | 10 ++++++++++ code/renderergl2/tr_image.c | 4 ++++ code/renderergl2/tr_local.h | 1 + code/renderergl2/tr_scene.c | 4 ++++ code/renderergl2/tr_shade.c | 23 ++++++++++++++++------- 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index cf4ddca0..314d74bc 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -101,7 +101,11 @@ static void R_ColorShiftLightingBytes( byte in[4], byte out[4] ) { int shift, r, g, b; // shift the color data based on overbright range +#if defined(USE_OVERBRIGHT) shift = r_mapOverBrightBits->integer - tr.overbrightBits; +#else + shift = 0; +#endif // shift the data based on overbright range r = in[0] << shift; @@ -136,7 +140,9 @@ static void R_ColorShiftLightingFloats(float in[4], float out[4], float scale ) { float r, g, b; +#if defined(USE_OVERBRIGHT) scale *= pow(2.0f, r_mapOverBrightBits->integer - tr.overbrightBits); +#endif r = in[0] * scale; g = in[1] * scale; @@ -2755,7 +2761,11 @@ void R_LoadLightGrid( lump_t *l ) { if (hdrLightGrid) { +#if defined(USE_OVERBRIGHT) float lightScale = pow(2, r_mapOverBrightBits->integer - tr.overbrightBits); +#else + float lightScale = 1.0f; +#endif //ri.Printf(PRINT_ALL, "found!\n"); diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index bb5759ee..2b63d093 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -2855,7 +2855,11 @@ void R_SetColorMappings( void ) { int inf; // setup the overbright lighting +#if defined(USE_OVERBRIGHT) tr.overbrightBits = r_overBrightBits->integer; +#else + tr.overbrightBits = 0; +#endif // allow 2 overbright bits if ( tr.overbrightBits > 2 ) { diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 9249849b..908fad5c 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -58,6 +58,7 @@ typedef unsigned int glIndex_t; #define CUBE_MAP_SIZE (1 << CUBE_MAP_MIPS) #define USE_VERT_TANGENT_SPACE +#define USE_OVERBRIGHT typedef struct dlight_s { vec3_t origin; diff --git a/code/renderergl2/tr_scene.c b/code/renderergl2/tr_scene.c index 88eda479..59147a6d 100644 --- a/code/renderergl2/tr_scene.c +++ b/code/renderergl2/tr_scene.c @@ -349,7 +349,11 @@ void RE_BeginScene(const refdef_t *fd) } else { +#if defined(USE_OVERBRIGHT) float scale = pow(2, r_mapOverBrightBits->integer - tr.overbrightBits - 8); +#else + float scale = (1 << r_mapOverBrightBits->integer) / 255.0f; +#endif if (r_forceSun->integer) { VectorScale(tr.sunLight, scale * r_forceSunLightScale->value, tr.refdef.sunCol); diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index 0a652fbb..b8fba863 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -444,9 +444,22 @@ static void ProjectDlightTexture( void ) { static void ComputeShaderColors( shaderStage_t *pStage, vec4_t baseColor, vec4_t vertColor, int blend ) { + qboolean isBlend = ((blend & GLS_SRCBLEND_BITS) == GLS_SRCBLEND_DST_COLOR) + || ((blend & GLS_SRCBLEND_BITS) == GLS_SRCBLEND_ONE_MINUS_DST_COLOR) + || ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_SRC_COLOR) + || ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_ONE_MINUS_SRC_COLOR); + + qboolean isWorldDraw = !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL); + +#if defined(USE_OVERBRIGHT) + float exactLight = 1.0f; +#else + float exactLight = (isBlend || !isWorldDraw) ? 1.0f : (float)(1 << r_mapOverBrightBits->integer); +#endif + baseColor[0] = baseColor[1] = - baseColor[2] = + baseColor[2] = exactLight; baseColor[3] = 1.0f; vertColor[0] = @@ -473,7 +486,7 @@ static void ComputeShaderColors( shaderStage_t *pStage, vec4_t baseColor, vec4_t vertColor[0] = vertColor[1] = - vertColor[2] = + vertColor[2] = exactLight; vertColor[3] = 1.0f; break; case CGEN_CONST: @@ -601,11 +614,7 @@ static void ComputeShaderColors( shaderStage_t *pStage, vec4_t baseColor, vec4_t } // multiply color by overbrightbits if this isn't a blend - if (tr.overbrightBits - && !((blend & GLS_SRCBLEND_BITS) == GLS_SRCBLEND_DST_COLOR) - && !((blend & GLS_SRCBLEND_BITS) == GLS_SRCBLEND_ONE_MINUS_DST_COLOR) - && !((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_SRC_COLOR) - && !((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_ONE_MINUS_SRC_COLOR)) + if (tr.overbrightBits && !isBlend) { float scale = 1 << tr.overbrightBits; From b52ede04457f5e46e3ee3a195238fa4b762647aa Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 8 Dec 2015 21:23:50 -0800 Subject: [PATCH 073/480] OpenGL2: Add r_glossIsRoughness. --- code/renderergl2/glsl/lightall_fp.glsl | 44 +++++++++++++---------- code/renderergl2/tr_glsl.c | 3 ++ code/renderergl2/tr_init.c | 2 ++ code/renderergl2/tr_local.h | 1 + code/renderergl2/tr_shade.c | 3 +- code/renderergl2/tr_shader.c | 49 ++++++++++++++++++++++---- 6 files changed, 76 insertions(+), 26 deletions(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index c0d2bc80..6c8977e1 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -150,11 +150,11 @@ float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap) } #endif -vec3 CalcDiffuse(vec3 diffuseAlbedo, float EH, float NH, float r) +vec3 CalcDiffuse(vec3 diffuseAlbedo, float EH, float NH, float roughness) { #if defined(USE_BURLEY) // modified from https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf - float fd90 = -0.5 + EH * EH * r; + float fd90 = -0.5 + EH * EH * roughness; float burley = 1.0 + fd90 * 0.04 / NH; burley *= burley; return diffuseAlbedo * burley; @@ -163,21 +163,21 @@ vec3 CalcDiffuse(vec3 diffuseAlbedo, float EH, float NH, float r) #endif } -vec3 EnvironmentBRDF(float r, float NE, vec3 specular) +vec3 EnvironmentBRDF(float roughness, float NE, vec3 specular) { // from http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf - float v = 1.0 - max(r, NE); + float v = 1.0 - max(roughness, NE); v *= v * v; return vec3(v) + specular; } -vec3 CalcSpecular(vec3 specular, float NH, float NL, float NE, float EH, float r) +vec3 CalcSpecular(vec3 specular, float NH, float NL, float NE, float EH, float roughness) { // from http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf - float rr = r*r; + float rr = roughness*roughness; float rrrr = rr*rr; float d = (NH * NH) * (rrrr - 1.0) + 1.0; - float v = (EH * EH) * (r + 0.5); + float v = (EH * EH) * (roughness + 0.5); return specular * (rrrr / (4.0 * d * d * v)); } @@ -276,6 +276,11 @@ void main() attenuation = 1.0; #endif + #if defined(r_lightGamma) + lightColor = pow(lightColor, vec3(r_lightGamma)); + ambientColor = pow(ambientColor, vec3(r_lightGamma)); + #endif + #if defined(USE_NORMALMAP) #if defined(SWIZZLE_NORMALMAP) N.xy = texture2D(u_NormalMap, texCoords).ag - vec2(0.5); @@ -304,11 +309,6 @@ void main() #endif #endif - #if defined(r_lightGamma) - lightColor = pow(lightColor, vec3(r_lightGamma)); - ambientColor = pow(ambientColor, vec3(r_lightGamma)); - #endif - #if defined(USE_LIGHTMAP) || defined(USE_LIGHT_VERTEX) ambientColor = lightColor; float surfNL = clamp(dot(var_Normal.xyz, L), 0.0, 1.0); @@ -343,7 +343,11 @@ void main() #endif float gloss = specular.a; - float r = exp2(-3.0 * gloss); + #if defined(GLOSS_IS_ROUGHNESS) + float roughness = gloss; + #else + float roughness = exp2(-3.0 * gloss); + #endif #if defined(SPECULAR_IS_METALLIC) // diffuse is actually base color, and green of specular is metallicness @@ -356,20 +360,20 @@ void main() diffuse.rgb *= vec3(1.0) - specular.rgb; #endif - reflectance = CalcDiffuse(diffuse.rgb, EH, NH, r); + reflectance = CalcDiffuse(diffuse.rgb, EH, NH, roughness); #if defined(USE_SHADOWMAP) && defined(SHADOWMAP_MODULATE) // bit of a hack, with modulated shadowmaps, add specular to sunlight H = normalize(var_PrimaryLightDir.xyz + E); EH = clamp(dot(E, H), 0.0, 1.0); NH = clamp(dot(N, H), 0.0, 1.0); - reflectance += shadowValue * CalcSpecular(specular.rgb, NH, NL, NE, EH, r); + reflectance += shadowValue * CalcSpecular(specular.rgb, NH, NL, NE, EH, roughness); #endif gl_FragColor.rgb = lightColor * reflectance * (attenuation * NL); gl_FragColor.rgb += ambientColor * (diffuse.rgb + specular.rgb); #if defined(USE_CUBEMAP) - reflectance = EnvironmentBRDF(r, NE, specular.rgb); + reflectance = EnvironmentBRDF(roughness, NE, specular.rgb); vec3 R = reflect(E, N); @@ -377,7 +381,11 @@ void main() // from http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/ vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir; + #if defined(GLOSS_IS_ROUGHNESS) + vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, roughness).rgb * u_EnableTextures.w; + #else vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 - gloss * 7.0).rgb * u_EnableTextures.w; + #endif // normalize cubemap based on lowest mip (~diffuse) // multiplying cubemap values by lighting below depends on either this or the cubemap being normalized at generation @@ -411,8 +419,8 @@ void main() EH2 = clamp(dot(E, H2), 0.0, 1.0); NH2 = clamp(dot(N, H2), 0.0, 1.0); - reflectance = CalcDiffuse(diffuse.rgb, EH2, NH2, r); - reflectance += CalcSpecular(specular.rgb, NH2, NL2, NE, EH2, r); + reflectance = CalcDiffuse(diffuse.rgb, EH2, NH2, roughness); + reflectance += CalcSpecular(specular.rgb, NH2, NL2, NE, EH2, roughness); lightColor = u_PrimaryLightColor * var_Color.rgb; diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index 3fcb9350..8ce3a4e7 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -1025,6 +1025,9 @@ void GLSL_InitGPUShaders(void) if (r_specularIsMetallic->value) Q_strcat(extradefines, 1024, "#define SPECULAR_IS_METALLIC\n"); + if (r_glossIsRoughness->value) + Q_strcat(extradefines, 1024, "#define GLOSS_IS_ROUGHNESS\n"); + if (r_dlightMode->integer >= 2) Q_strcat(extradefines, 1024, "#define USE_SHADOWMAP\n"); diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 8b4ff9e6..265ae20b 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -143,6 +143,7 @@ cvar_t *r_deluxeMapping; cvar_t *r_parallaxMapping; cvar_t *r_cubeMapping; cvar_t *r_specularIsMetallic; +cvar_t *r_glossIsRoughness; cvar_t *r_baseNormalX; cvar_t *r_baseNormalY; cvar_t *r_baseParallax; @@ -1213,6 +1214,7 @@ void R_Register( void ) r_parallaxMapping = ri.Cvar_Get( "r_parallaxMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_cubeMapping = ri.Cvar_Get( "r_cubeMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_specularIsMetallic = ri.Cvar_Get( "r_specularIsMetallic", "0", CVAR_ARCHIVE | CVAR_LATCH ); + r_glossIsRoughness = ri.Cvar_Get("r_glossIsRoughness", "0", CVAR_ARCHIVE | CVAR_LATCH); r_baseNormalX = ri.Cvar_Get( "r_baseNormalX", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); r_baseNormalY = ri.Cvar_Get( "r_baseNormalY", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); r_baseParallax = ri.Cvar_Get( "r_baseParallax", "0.05", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 908fad5c..f1b08060 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1786,6 +1786,7 @@ extern cvar_t *r_deluxeMapping; extern cvar_t *r_parallaxMapping; extern cvar_t *r_cubeMapping; extern cvar_t *r_specularIsMetallic; +extern cvar_t *r_glossIsRoughness; extern cvar_t *r_baseNormalX; extern cvar_t *r_baseNormalY; extern cvar_t *r_baseParallax; diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index b8fba863..d606ce46 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -449,11 +449,10 @@ static void ComputeShaderColors( shaderStage_t *pStage, vec4_t baseColor, vec4_t || ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_SRC_COLOR) || ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_ONE_MINUS_SRC_COLOR); - qboolean isWorldDraw = !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL); - #if defined(USE_OVERBRIGHT) float exactLight = 1.0f; #else + qboolean isWorldDraw = !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL); float exactLight = (isBlend || !isWorldDraw) ? 1.0f : (float)(1 << r_mapOverBrightBits->integer); #endif diff --git a/code/renderergl2/tr_shader.c b/code/renderergl2/tr_shader.c index cad242aa..5e664f4f 100644 --- a/code/renderergl2/tr_shader.c +++ b/code/renderergl2/tr_shader.c @@ -954,17 +954,23 @@ static qboolean ParseStage( shaderStage_t *stage, char **text ) exponent = atof( token ); - // Change shininess to gloss - // FIXME: assumes max exponent of 8192 and min of 1, must change here if altered in lightall_fp.glsl - exponent = CLAMP(exponent, 1.0, 8192.0); - - stage->specularScale[3] = log(exponent) / log(8192.0); + if (r_glossIsRoughness->integer) + stage->specularScale[3] = powf(2.0f / (exponent + 2.0), 0.25); + else + { + // Change shininess to gloss + // Assumes max exponent of 8190 and min of 0, must change here if altered in lightall_fp.glsl + exponent = CLAMP(exponent, 0.0f, 8190.0f); + stage->specularScale[3] = (log2f(exponent + 2.0f) - 1.0f) / 12.0f; + } } // // gloss // else if (!Q_stricmp(token, "gloss")) { + float gloss; + token = COM_ParseExt(text, qfalse); if ( token[0] == 0 ) { @@ -972,7 +978,38 @@ static qboolean ParseStage( shaderStage_t *stage, char **text ) continue; } - stage->specularScale[3] = atof( token ); + gloss = atof(token); + + if (r_glossIsRoughness->integer) + stage->specularScale[3] = exp2f(-3.0f * gloss); + else + stage->specularScale[3] = gloss; + } + // + // roughness + // + else if (!Q_stricmp(token, "roughness")) + { + float roughness; + + token = COM_ParseExt(text, qfalse); + if (token[0] == 0) + { + ri.Printf(PRINT_WARNING, "WARNING: missing parameter for roughness in shader '%s'\n", shader.name); + continue; + } + + roughness = atof(token); + + if (r_glossIsRoughness->integer) + stage->specularScale[3] = roughness; + else + { + if (roughness >= 0.125) + stage->specularScale[3] = log2f(1.0f / roughness) / 3.0f; + else + stage->specularScale[3] = 1.0f; + } } // // parallaxDepth From f9c72eee693b08cd301e9aca2f444318d8ae846b Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 9 Dec 2015 02:00:40 -0800 Subject: [PATCH 074/480] OpenGL2: Parse radius entries from misc_cubemap entities. --- code/renderergl2/tr_backend.c | 9 ++++++--- code/renderergl2/tr_bsp.c | 20 +++++++++++++------- code/renderergl2/tr_light.c | 2 +- code/renderergl2/tr_local.h | 9 +++++++-- code/renderergl2/tr_main.c | 2 +- code/renderergl2/tr_shade.c | 9 ++++----- 6 files changed, 32 insertions(+), 19 deletions(-) diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index fe98d2a3..caddba36 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -482,8 +482,9 @@ void RB_BeginDrawingView (void) { // FIXME: hack for cubemap testing if (tr.renderCubeFbo && backEnd.viewParms.targetFbo == tr.renderCubeFbo) { + cubemap_t *cubemap = &tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex]; //qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + backEnd.viewParms.targetFboLayer, backEnd.viewParms.targetFbo->colorImage[0]->texnum, 0); - qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + backEnd.viewParms.targetFboLayer, tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex]->texnum, 0); + qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + backEnd.viewParms.targetFboLayer, cubemap->image->texnum, 0); } } } @@ -1311,9 +1312,11 @@ const void *RB_DrawSurfs( const void *data ) { if (glRefConfig.framebufferObject && tr.renderCubeFbo && backEnd.viewParms.targetFbo == tr.renderCubeFbo) { + cubemap_t *cubemap = &tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex]; + FBO_Bind(NULL); GL_SelectTexture(TB_CUBEMAP); - GL_BindToTMU(tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex], TB_CUBEMAP); + GL_BindToTMU(cubemap->image, TB_CUBEMAP); qglGenerateMipmapEXT(GL_TEXTURE_CUBE_MAP); GL_SelectTexture(0); } @@ -1724,7 +1727,7 @@ const void *RB_PostProcess(const void *data) { VectorSet4(dstBox, 0, glConfig.vidHeight - 256, 256, 256); //FBO_BlitFromTexture(tr.renderCubeImage, NULL, NULL, NULL, dstBox, &tr.testcubeShader, NULL, 0); - FBO_BlitFromTexture(tr.cubemaps[cubemapIndex - 1], NULL, NULL, NULL, dstBox, &tr.testcubeShader, NULL, 0); + FBO_BlitFromTexture(tr.cubemaps[cubemapIndex - 1].image, NULL, NULL, NULL, dstBox, &tr.testcubeShader, NULL, 0); } } #endif diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index 314d74bc..fad9d2f8 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -2996,16 +2996,17 @@ void R_LoadCubemapEntities(char *cubemapEntityName) return; tr.numCubemaps = numCubemaps; - tr.cubemapOrigins = ri.Hunk_Alloc( tr.numCubemaps * sizeof(*tr.cubemapOrigins), h_low); - tr.cubemaps = ri.Hunk_Alloc( tr.numCubemaps * sizeof(*tr.cubemaps), h_low); + tr.cubemaps = ri.Hunk_Alloc(tr.numCubemaps * sizeof(*tr.cubemaps), h_low); + memset(tr.cubemaps, 0, tr.numCubemaps * sizeof(*tr.cubemaps)); numCubemaps = 0; while(R_ParseSpawnVars(spawnVarChars, sizeof(spawnVarChars), &numSpawnVars, spawnVars)) { int i; qboolean isCubemap = qfalse; - qboolean positionSet = qfalse; + qboolean originSet = qfalse; vec3_t origin; + float parallaxRadius = 1000.0f; for (i = 0; i < numSpawnVars; i++) { @@ -3015,14 +3016,19 @@ void R_LoadCubemapEntities(char *cubemapEntityName) if (!Q_stricmp(spawnVars[i][0], "origin")) { sscanf(spawnVars[i][1], "%f %f %f", &origin[0], &origin[1], &origin[2]); - positionSet = qtrue; + originSet = qtrue; + } + else if (!Q_stricmp(spawnVars[i][0], "radius")) + { + sscanf(spawnVars[i][1], "%f", ¶llaxRadius); } } - if (isCubemap && positionSet) + if (isCubemap && originSet) { //ri.Printf(PRINT_ALL, "cubemap at %f %f %f\n", origin[0], origin[1], origin[2]); - VectorCopy(origin, tr.cubemapOrigins[numCubemaps]); + VectorCopy(origin, tr.cubemaps[numCubemaps].origin); + tr.cubemaps[numCubemaps].parallaxRadius = parallaxRadius; numCubemaps++; } } @@ -3068,7 +3074,7 @@ void R_RenderAllCubemaps(void) for (i = 0; i < tr.numCubemaps; i++) { - tr.cubemaps[i] = R_CreateImage(va("*cubeMap%d", i), NULL, CUBE_MAP_SIZE, CUBE_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, GL_RGBA8); + tr.cubemaps[i].image = R_CreateImage(va("*cubeMap%d", i), NULL, CUBE_MAP_SIZE, CUBE_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, GL_RGBA8); } for (i = 0; i < tr.numCubemaps; i++) diff --git a/code/renderergl2/tr_light.c b/code/renderergl2/tr_light.c index 7d3ed2a5..a335eb6f 100644 --- a/code/renderergl2/tr_light.c +++ b/code/renderergl2/tr_light.c @@ -471,7 +471,7 @@ int R_CubemapForPoint( vec3_t point ) vec3_t diff; vec_t length; - VectorSubtract(point, tr.cubemapOrigins[i], diff); + VectorSubtract(point, tr.cubemaps[i].origin, diff); length = DotProduct(diff, diff); if (shortest > length) diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index f1b08060..2b3eecd8 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -60,6 +60,12 @@ typedef unsigned int glIndex_t; #define USE_VERT_TANGENT_SPACE #define USE_OVERBRIGHT +typedef struct cubemap_s { + vec3_t origin; + float parallaxRadius; + image_t *image; +} cubemap_t; + typedef struct dlight_s { vec3_t origin; vec3_t color; // range from 0.0 to 1.0, should be color normalized @@ -1560,8 +1566,7 @@ typedef struct { int fatLightmapStep; int numCubemaps; - vec3_t *cubemapOrigins; - image_t **cubemaps; + cubemap_t *cubemaps; trRefEntity_t *currentEntity; trRefEntity_t worldEntity; // point currentEntity at this when rendering world diff --git a/code/renderergl2/tr_main.c b/code/renderergl2/tr_main.c index 4c80ad60..ca5327cd 100644 --- a/code/renderergl2/tr_main.c +++ b/code/renderergl2/tr_main.c @@ -2862,7 +2862,7 @@ void R_RenderCubemapSide( int cubemapIndex, int cubemapSide, qboolean subscene ) memset( &refdef, 0, sizeof( refdef ) ); refdef.rdflags = 0; - VectorCopy(tr.cubemapOrigins[cubemapIndex], refdef.vieworg); + VectorCopy(tr.cubemaps[cubemapIndex].origin, refdef.vieworg); switch(cubemapSide) { diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index d606ce46..fde95e56 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -1375,15 +1375,14 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) if (!(tr.viewParms.flags & VPF_NOCUBEMAPS) && input->cubemapIndex && r_cubeMapping->integer) { vec4_t vec; + cubemap_t *cubemap = &tr.cubemaps[input->cubemapIndex - 1]; - GL_BindToTMU( tr.cubemaps[input->cubemapIndex - 1], TB_CUBEMAP); + GL_BindToTMU( cubemap->image, TB_CUBEMAP); - vec[0] = tr.cubemapOrigins[input->cubemapIndex - 1][0] - backEnd.viewParms.or.origin[0]; - vec[1] = tr.cubemapOrigins[input->cubemapIndex - 1][1] - backEnd.viewParms.or.origin[1]; - vec[2] = tr.cubemapOrigins[input->cubemapIndex - 1][2] - backEnd.viewParms.or.origin[2]; + VectorSubtract(cubemap->origin, backEnd.viewParms.or.origin, vec); vec[3] = 1.0f; - VectorScale4(vec, 1.0f / 1000.0f, vec); + VectorScale4(vec, 1.0f / cubemap->parallaxRadius, vec); GLSL_SetUniformVec4(sp, UNIFORM_CUBEMAPINFO, vec); } From 08ecc3a80a98e6f57ff4f2ae301fa2b3df501cf4 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 9 Dec 2015 03:42:12 -0800 Subject: [PATCH 075/480] OpenGL2: Forgot a multiply. --- code/renderergl2/glsl/lightall_fp.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index 6c8977e1..9330b1f8 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -382,7 +382,7 @@ void main() vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir; #if defined(GLOSS_IS_ROUGHNESS) - vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, roughness).rgb * u_EnableTextures.w; + vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 * roughness).rgb * u_EnableTextures.w; #else vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 - gloss * 7.0).rgb * u_EnableTextures.w; #endif From c07cc282d036dd70f90a9d0594f8f680508b2f98 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 9 Dec 2015 05:25:58 -0800 Subject: [PATCH 076/480] OpenGL2: Use correct sunlight color for sunlight specular. --- code/renderergl2/glsl/lightall_fp.glsl | 19 ++++++++----------- code/renderergl2/tr_scene.c | 25 ++++++++++--------------- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index 9330b1f8..17dc9fca 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -361,13 +361,6 @@ void main() #endif reflectance = CalcDiffuse(diffuse.rgb, EH, NH, roughness); - #if defined(USE_SHADOWMAP) && defined(SHADOWMAP_MODULATE) - // bit of a hack, with modulated shadowmaps, add specular to sunlight - H = normalize(var_PrimaryLightDir.xyz + E); - EH = clamp(dot(E, H), 0.0, 1.0); - NH = clamp(dot(N, H), 0.0, 1.0); - reflectance += shadowValue * CalcSpecular(specular.rgb, NH, NL, NE, EH, roughness); - #endif gl_FragColor.rgb = lightColor * reflectance * (attenuation * NL); gl_FragColor.rgb += ambientColor * (diffuse.rgb + specular.rgb); @@ -403,7 +396,7 @@ void main() gl_FragColor.rgb += cubeLightColor * reflectance; #endif - #if defined(USE_PRIMARY_LIGHT) + #if defined(USE_PRIMARY_LIGHT) || defined(SHADOWMAP_MODULATE) vec3 L2, H2; float NL2, EH2, NH2; @@ -419,10 +412,14 @@ void main() EH2 = clamp(dot(E, H2), 0.0, 1.0); NH2 = clamp(dot(N, H2), 0.0, 1.0); - reflectance = CalcDiffuse(diffuse.rgb, EH2, NH2, roughness); - reflectance += CalcSpecular(specular.rgb, NH2, NL2, NE, EH2, roughness); + reflectance = CalcSpecular(specular.rgb, NH2, NL2, NE, EH2, roughness); - lightColor = u_PrimaryLightColor * var_Color.rgb; + // bit of a hack, with modulated shadowmaps, ignore diffuse + #if !defined(SHADOWMAP_MODULATE) + reflectance += CalcDiffuse(diffuse.rgb, EH2, NH2, roughness); + #endif + + lightColor = u_PrimaryLightColor; #if defined(r_lightGamma) lightColor = pow(lightColor, vec3(r_lightGamma)); diff --git a/code/renderergl2/tr_scene.c b/code/renderergl2/tr_scene.c index 59147a6d..bd85944d 100644 --- a/code/renderergl2/tr_scene.c +++ b/code/renderergl2/tr_scene.c @@ -335,35 +335,30 @@ void RE_BeginScene(const refdef_t *fd) } else { +#if defined(USE_OVERBRIGHT) + float scale = pow(2, r_mapOverBrightBits->integer - tr.overbrightBits - 8); +#else + float scale = (1 << r_mapOverBrightBits->integer) / 255.0f; +#endif tr.refdef.colorScale = r_forceSun->integer ? r_forceSunMapLightScale->value : tr.mapLightScale; + if (r_forceSun->integer) + VectorScale(tr.sunLight, scale * r_forceSunLightScale->value, tr.refdef.sunCol); + else + VectorScale(tr.sunLight, scale, tr.refdef.sunCol); + if (r_sunlightMode->integer == 1) { - tr.refdef.sunCol[0] = - tr.refdef.sunCol[1] = - tr.refdef.sunCol[2] = 1.0f; - tr.refdef.sunAmbCol[0] = tr.refdef.sunAmbCol[1] = tr.refdef.sunAmbCol[2] = r_forceSun->integer ? r_forceSunAmbientScale->value : tr.sunShadowScale; } else { -#if defined(USE_OVERBRIGHT) - float scale = pow(2, r_mapOverBrightBits->integer - tr.overbrightBits - 8); -#else - float scale = (1 << r_mapOverBrightBits->integer) / 255.0f; -#endif if (r_forceSun->integer) - { - VectorScale(tr.sunLight, scale * r_forceSunLightScale->value, tr.refdef.sunCol); VectorScale(tr.sunLight, scale * r_forceSunAmbientScale->value, tr.refdef.sunAmbCol); - } else - { - VectorScale(tr.sunLight, scale, tr.refdef.sunCol); VectorScale(tr.sunLight, scale * tr.sunShadowScale, tr.refdef.sunAmbCol); - } } } From cbfc3471bc5058c6e8ada0e83555e512f8f51194 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 15 Dec 2015 03:23:55 -0800 Subject: [PATCH 077/480] OpenGL2: Switch to RGTC from LATC for normal maps. Also added a RGTC compressor as a workaround on Intel graphics. --- code/renderercommon/qgl.h | 12 +- code/renderergl2/tr_extensions.c | 26 +++- code/renderergl2/tr_glsl.c | 2 +- code/renderergl2/tr_image.c | 248 ++++++++++++++++++------------- code/renderergl2/tr_local.h | 4 +- opengl2-readme.md | 4 +- 6 files changed, 181 insertions(+), 115 deletions(-) diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h index 252e0bb2..7d94c25a 100644 --- a/code/renderercommon/qgl.h +++ b/code/renderercommon/qgl.h @@ -677,12 +677,12 @@ extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLs #define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 #endif -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc -#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 +#ifndef GL_ARB_texture_compression_rgtc +#define GL_ARB_texture_compression_rgtc +#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 #endif #ifndef GL_ARB_texture_compression_bptc diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index 357d4795..91db0632 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -585,6 +585,22 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } + // GL_ARB_texture_compression + extension = "GL_ARB_texture_compression"; + glRefConfig.arbTextureCompression = qfalse; + if (GLimp_HaveExtension(extension)) + { + qglCompressedTexImage3DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage3DARB"); + qglCompressedTexImage2DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage2DARB"); + qglCompressedTexImage1DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage1DARB"); + qglCompressedTexSubImage3DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage3DARB"); + qglCompressedTexSubImage2DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage2DARB"); + qglCompressedTexSubImage1DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage1DARB"); + qglGetCompressedTexImageARB = (void *)SDL_GL_GetProcAddress("glGetCompressedTexImageARB"); + glRefConfig.arbTextureCompression = qtrue; + ri.Printf(PRINT_ALL, result[glRefConfig.arbTextureCompression], extension); + } + // GL_EXT_framebuffer_multisample extension = "GL_EXT_framebuffer_multisample"; glRefConfig.framebufferMultisample = qfalse; @@ -601,12 +617,12 @@ void GLimp_InitExtraExtensions() glRefConfig.textureCompression = TCR_NONE; - // GL_EXT_texture_compression_latc - extension = "GL_EXT_texture_compression_latc"; + // GL_ARB_texture_compression_rgtc + extension = "GL_ARB_texture_compression_rgtc"; if (GLimp_HaveExtension(extension)) { - if (r_ext_compressed_textures->integer) - glRefConfig.textureCompression |= TCR_LATC; + if (r_ext_compressed_textures->integer && glRefConfig.arbTextureCompression) + glRefConfig.textureCompression |= TCR_RGTC; ri.Printf(PRINT_ALL, result[r_ext_compressed_textures->integer ? 1 : 0], extension); } @@ -615,6 +631,8 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } + glRefConfig.swizzleNormalmap = r_ext_compressed_textures->integer && !(glRefConfig.textureCompression & TCR_RGTC); + // GL_ARB_texture_compression_bptc extension = "GL_ARB_texture_compression_bptc"; if (GLimp_HaveExtension(extension)) diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index 8ce3a4e7..14e20105 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -1031,7 +1031,7 @@ void GLSL_InitGPUShaders(void) if (r_dlightMode->integer >= 2) Q_strcat(extradefines, 1024, "#define USE_SHADOWMAP\n"); - if (1) + if (glRefConfig.swizzleNormalmap) Q_strcat(extradefines, 1024, "#define SWIZZLE_NORMALMAP\n"); if (r_hdr->integer && !glRefConfig.floatLightmap) diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index 2b63d093..dbef286f 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -176,15 +176,20 @@ void R_ImageList_f( void ) { format = "sBPTC"; // 128 bits per 16 pixels, so 1 byte per pixel break; - case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: - format = "LATC "; + case GL_COMPRESSED_RG_RGTC2: + format = "RGTC2"; // 128 bits per 16 pixels, so 1 byte per pixel break; - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: + case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: format = "DXT1 "; // 64 bits per 16 pixels, so 4 bits per pixel estSize /= 2; break; + case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: + format = "DXT1a"; + // 64 bits per 16 pixels, so 4 bits per pixel + estSize /= 2; + break; case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: format = "DXT5 "; // 128 bits per 16 pixels, so 1 byte per pixel @@ -1331,41 +1336,6 @@ static void R_MipMapsRGB( byte *in, int inWidth, int inHeight) } -static void R_MipMapLuminanceAlpha (const byte *in, byte *out, int width, int height) -{ - int i, j, row; - - if ( width == 1 && height == 1 ) { - return; - } - - row = width * 4; - width >>= 1; - height >>= 1; - - if ( width == 0 || height == 0 ) { - width += height; // get largest - for (i=0 ; i> 1; - out[3] = (in[3] + in[7]) >> 1; - } - return; - } - - for (i=0 ; i> 2; - out[3] = (in[3] + in[7] + in[row+3] + in[row+7]) >> 2; - } - } - -} - - static void R_MipMapNormalHeight (const byte *in, byte *out, int width, int height, qboolean swizzle) { int i, j; @@ -1656,13 +1626,13 @@ static GLenum RawImage_GetFormat(const byte *data, int numPixels, qboolean light if(normalmap) { - if ((!RawImage_HasAlpha(data, numPixels) || (type == IMGTYPE_NORMAL)) && !forceNoCompression && (glRefConfig.textureCompression & TCR_LATC)) + if ((type == IMGTYPE_NORMALHEIGHT) && RawImage_HasAlpha(data, numPixels)) { - internalFormat = GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT; - } - else - { - if ( !forceNoCompression && glConfig.textureCompression == TC_S3TC_ARB ) + if (!forceNoCompression && glRefConfig.textureCompression & TCR_BPTC) + { + internalFormat = GL_COMPRESSED_RGBA_BPTC_UNORM_ARB; + } + else if (!forceNoCompression && glConfig.textureCompression == TC_S3TC_ARB) { internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; } @@ -1679,6 +1649,33 @@ static GLenum RawImage_GetFormat(const byte *data, int numPixels, qboolean light internalFormat = GL_RGBA; } } + else + { + if (!forceNoCompression && glRefConfig.textureCompression & TCR_RGTC) + { + internalFormat = GL_COMPRESSED_RG_RGTC2; + } + else if (!forceNoCompression && glRefConfig.textureCompression & TCR_BPTC) + { + internalFormat = GL_COMPRESSED_RGBA_BPTC_UNORM_ARB; + } + else if (!forceNoCompression && glConfig.textureCompression == TC_S3TC_ARB) + { + internalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; + } + else if (r_texturebits->integer == 16) + { + internalFormat = GL_RGB5; + } + else if (r_texturebits->integer == 32) + { + internalFormat = GL_RGB8; + } + else + { + internalFormat = GL_RGB; + } + } } else if(lightMap) { @@ -1774,10 +1771,101 @@ static GLenum RawImage_GetFormat(const byte *data, int numPixels, qboolean light return internalFormat; } +static void CompressMonoBlock(byte outdata[8], const byte indata[16]) +{ + int hi, lo, diff, bias, outbyte, shift, i; + byte *p = outdata; + + hi = lo = indata[0]; + for (i = 1; i < 16; i++) + { + hi = MAX(indata[i], hi); + lo = MIN(indata[i], lo); + } + + *p++ = hi; + *p++ = lo; + + diff = hi - lo; + + if (diff == 0) + { + outbyte = (hi == 255) ? 255 : 0; + + for (i = 0; i < 6; i++) + *p++ = outbyte; + + return; + } + + bias = diff / 2 - lo * 7; + outbyte = shift = 0; + for (i = 0; i < 16; i++) + { + const byte fixIndex[8] = { 1, 7, 6, 5, 4, 3, 2, 0 }; + byte index = fixIndex[(indata[i] * 7 + bias) / diff]; + + outbyte |= index << shift; + shift += 3; + if (shift >= 8) + { + *p++ = outbyte & 0xff; + shift -= 8; + outbyte >>= 8; + } + } +} + +static void RawImage_UploadToRgtc2Texture(byte *data, int width, int height, int mip) +{ + int wBlocks, hBlocks, y, x, size; + byte *compressedData, *p; + + wBlocks = (width + 3) / 4; + hBlocks = (height + 3) / 4; + size = wBlocks * hBlocks * 16; + + p = compressedData = ri.Hunk_AllocateTempMemory(size); + for (y = 0; y < height; y += 4) + { + int oh = MIN(4, height - y); + + for (x = 0; x < width; x += 4) + { + byte workingData[16]; + int component; + + int ow = MIN(4, width - x); + + for (component = 0; component < 2; component++) + { + int ox, oy; + + for (oy = 0; oy < oh; oy++) + for (ox = 0; ox < ow; ox++) + workingData[oy * 4 + ox] = data[((y + oy) * width + x + ox) * 4 + component]; + + // dupe data to fill + for (oy = 0; oy < 4; oy++) + for (ox = (oy < oh) ? ow : 0; ox < 4; ox++) + workingData[oy * 4 + ox] = workingData[(oy % oh) * 4 + ox % ow]; + + CompressMonoBlock(p, workingData); + p += 8; + } + } + } + + qglCompressedTexImage2DARB(GL_TEXTURE_2D, mip, GL_COMPRESSED_RG_RGTC2, width, height, 0, size, compressedData); + + ri.Hunk_FreeTempMemory(compressedData); +} + static void RawImage_UploadTexture( byte *data, int x, int y, int width, int height, GLenum internalFormat, imgType_t type, imgFlags_t flags, qboolean subtexture ) { int dataFormat, dataType; + qboolean rgtc = (internalFormat == GL_COMPRESSED_RG_RGTC2); switch(internalFormat) { @@ -1801,7 +1889,12 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei if ( subtexture ) qglTexSubImage2D( GL_TEXTURE_2D, 0, x, y, width, height, dataFormat, dataType, data ); else - qglTexImage2D (GL_TEXTURE_2D, 0, internalFormat, width, height, 0, dataFormat, dataType, data ); + { + if (rgtc) + RawImage_UploadToRgtc2Texture(data, width, height, 0); + else + qglTexImage2D(GL_TEXTURE_2D, 0, internalFormat, width, height, 0, dataFormat, dataType, data); + } if (flags & IMGFLAG_MIPMAP) { @@ -1814,14 +1907,7 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei { if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) { - if (internalFormat == GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT) - { - R_MipMapLuminanceAlpha( data, data, width, height ); - } - else - { - R_MipMapNormalHeight( data, data, width, height, qtrue); - } + R_MipMapNormalHeight( data, data, width, height, glRefConfig.swizzleNormalmap ); } else { @@ -1848,7 +1934,10 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei } else { - qglTexImage2D (GL_TEXTURE_2D, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data ); + if (rgtc) + RawImage_UploadToRgtc2Texture(data, width, height, miplevel); + else + qglTexImage2D(GL_TEXTURE_2D, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data); } } } @@ -1902,25 +1991,11 @@ static void Upload32( byte *data, int width, int height, imgType_t type, imgFlag } } - // normals are always swizzled - if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) + if (glRefConfig.swizzleNormalmap && (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT)) { RawImage_SwizzleRA(data, width, height); } - // LATC2 is only used for normals - if (internalFormat == GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT) - { - byte *in = data; - int c = width * height; - while (c--) - { - in[0] = in[1]; - in[2] = in[1]; - in += 4; - } - } - // copy or resample data as appropriate for first MIP level if ( ( scaled_width == width ) && ( scaled_height == height ) ) { @@ -1942,14 +2017,7 @@ static void Upload32( byte *data, int width, int height, imgType_t type, imgFlag if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) { - if (internalFormat == GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT) - { - R_MipMapLuminanceAlpha( data, data, width, height ); - } - else - { - R_MipMapNormalHeight( data, data, width, height, qtrue); - } + R_MipMapNormalHeight( data, data, width, height, glRefConfig.swizzleNormalmap ); } else { @@ -2185,26 +2253,11 @@ void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int h int scaled_width, scaled_height, scaled_x, scaled_y; byte *data = pic; - // normals are always swizzled - if (image->type == IMGTYPE_NORMAL || image->type == IMGTYPE_NORMALHEIGHT) + if (glRefConfig.swizzleNormalmap && (image->type == IMGTYPE_NORMAL || image->type == IMGTYPE_NORMALHEIGHT)) { RawImage_SwizzleRA(pic, width, height); } - // LATC2 is only used for normals - if (image->internalFormat == GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT) - { - byte *in = data; - int c = width * height; - while (c--) - { - in[0] = in[1]; - in[2] = in[1]; - in += 4; - } - } - - RawImage_ScaleToPower2(&pic, &width, &height, &scaled_width, &scaled_height, image->type, image->flags, &resampledBuffer); scaledBuffer = ri.Hunk_AllocateTempMemory( sizeof( unsigned ) * scaled_width * scaled_height ); @@ -2237,14 +2290,7 @@ void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int h if (image->type == IMGTYPE_NORMAL || image->type == IMGTYPE_NORMALHEIGHT) { - if (image->internalFormat == GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT) - { - R_MipMapLuminanceAlpha( data, data, width, height ); - } - else - { - R_MipMapNormalHeight( data, data, width, height, qtrue); - } + R_MipMapNormalHeight( data, data, width, height, glRefConfig.swizzleNormalmap ); } else { diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 2b3eecd8..f083fe9b 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1380,7 +1380,7 @@ typedef enum { typedef enum { TCR_NONE = 0x0000, - TCR_LATC = 0x0001, + TCR_RGTC = 0x0001, TCR_BPTC = 0x0002, } textureCompressionRef_t; @@ -1404,7 +1404,9 @@ typedef struct { qboolean textureFloat; qboolean halfFloatPixel; qboolean packedDepthStencil; + qboolean arbTextureCompression; textureCompressionRef_t textureCompression; + qboolean swizzleNormalmap; qboolean framebufferMultisample; qboolean framebufferBlit; diff --git a/opengl2-readme.md b/opengl2-readme.md index 8efeec79..e0efd58c 100644 --- a/opengl2-readme.md +++ b/opengl2-readme.md @@ -18,7 +18,7 @@ compatibility with existing Quake 3 mods. - Texture upsampling. - Advanced materials support. - Advanced shading and specular methods. - - LATC and BPTC texture compression support. + - RGTC and BPTC texture compression support. - Screen-space ambient occlusion. @@ -67,7 +67,7 @@ Cvars for simple rendering features: * `r_ext_compressed_textures` - Automatically compress textures. 0 - No texture compression. (default) - 1 - DXT/LATC texture compression if + 1 - DXT/RGTC texture compression if supported. 2 - BPTC texture compression if supported. From 336419235ae034e63ff595954bed30b801183ac4 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 16 Dec 2015 07:12:30 -0800 Subject: [PATCH 078/480] OpenGL2: Some tr_image.c cleanup. --- code/renderergl2/tr_image.c | 301 +++++++++--------------------------- 1 file changed, 77 insertions(+), 224 deletions(-) diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index dbef286f..59d4fd8c 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -1451,7 +1451,7 @@ RawImage_ScaleToPower2 =============== */ -static void RawImage_ScaleToPower2( byte **data, int *inout_width, int *inout_height, int *inout_scaled_width, int *inout_scaled_height, imgType_t type, imgFlags_t flags, byte **resampledBuffer) +static qboolean RawImage_ScaleToPower2( byte **data, int *inout_width, int *inout_height, imgType_t type, imgFlags_t flags, byte **resampledBuffer) { int width = *inout_width; int height = *inout_height; @@ -1460,6 +1460,7 @@ static void RawImage_ScaleToPower2( byte **data, int *inout_width, int *inout_he qboolean picmip = flags & IMGFLAG_PICMIP; qboolean mipmap = flags & IMGFLAG_MIPMAP; qboolean clampToEdge = flags & IMGFLAG_CLAMPTOEDGE; + qboolean notScaled; // // convert to exact power of 2 sizes @@ -1506,22 +1507,9 @@ static void RawImage_ScaleToPower2( byte **data, int *inout_width, int *inout_he *resampledBuffer = ri.Hunk_AllocateTempMemory( finalwidth * finalheight * 4 ); if (scaled_width != width || scaled_height != height) - { ResampleTexture (*data, width, height, *resampledBuffer, scaled_width, scaled_height); - } else - { - byte *inbyte, *outbyte; - int i; - - inbyte = *data; - outbyte = *resampledBuffer; - - for (i = width * height * 4; i > 0; i--) - { - *outbyte++ = *inbyte++; - } - } + Com_Memcpy(*resampledBuffer, *data, width * height * 4); if (type == IMGTYPE_COLORALPHA) RGBAtoYCoCgA(*resampledBuffer, *resampledBuffer, scaled_width, scaled_height); @@ -1535,34 +1523,29 @@ static void RawImage_ScaleToPower2( byte **data, int *inout_width, int *inout_he } if (type == IMGTYPE_COLORALPHA) - { YCoCgAtoRGBA(*resampledBuffer, *resampledBuffer, scaled_width, scaled_height); - } else if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) - { FillInNormalizedZ(*resampledBuffer, *resampledBuffer, scaled_width, scaled_height); - } - //endTime = ri.Milliseconds(); //ri.Printf(PRINT_ALL, "upsampled %dx%d to %dx%d in %dms\n", width, height, scaled_width, scaled_height, endTime - startTime); *data = *resampledBuffer; - width = scaled_width; - height = scaled_height; } - else if ( scaled_width != width || scaled_height != height ) { + else if ( scaled_width != width || scaled_height != height ) + { if (data && resampledBuffer) { *resampledBuffer = ri.Hunk_AllocateTempMemory( scaled_width * scaled_height * 4 ); ResampleTexture (*data, width, height, *resampledBuffer, scaled_width, scaled_height); *data = *resampledBuffer; } - width = scaled_width; - height = scaled_height; } + width = scaled_width; + height = scaled_height; + // // perform optional picmip operation // @@ -1571,16 +1554,6 @@ static void RawImage_ScaleToPower2( byte **data, int *inout_width, int *inout_he scaled_height >>= r_picmip->integer; } - // - // clamp to minimum size - // - if (scaled_width < 1) { - scaled_width = 1; - } - if (scaled_height < 1) { - scaled_height = 1; - } - // // clamp to the current upper OpenGL limit // scale both axis down equally so we don't have to @@ -1592,10 +1565,35 @@ static void RawImage_ScaleToPower2( byte **data, int *inout_width, int *inout_he scaled_height >>= 1; } - *inout_width = width; - *inout_height = height; - *inout_scaled_width = scaled_width; - *inout_scaled_height = scaled_height; + // + // clamp to minimum size + // + scaled_width = MAX(1, scaled_width); + scaled_height = MAX(1, scaled_height); + + notScaled = (width == scaled_width) && (height == scaled_height); + + // + // rescale texture to new size using existing mipmap functions + // + if (data) + { + while (width > scaled_width || height > scaled_height) + { + if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) + R_MipMapNormalHeight(*data, *data, width, height, qfalse); + else + R_MipMapsRGB(*data, width, height); + + width = MAX(1, width >> 1); + height = MAX(1, height >> 1); + } + } + + *inout_width = width; + *inout_height = height; + + return notScaled; } @@ -1950,23 +1948,30 @@ Upload32 =============== */ -static void Upload32( byte *data, int width, int height, imgType_t type, imgFlags_t flags, - qboolean lightMap, GLenum internalFormat, int *pUploadWidth, int *pUploadHeight) +static void Upload32(byte *data, int x, int y, int width, int height, image_t *image) { - byte *scaledBuffer = NULL; byte *resampledBuffer = NULL; - int scaled_width, scaled_height; int i, c; byte *scan; - RawImage_ScaleToPower2(&data, &width, &height, &scaled_width, &scaled_height, type, flags, &resampledBuffer); + imgType_t type = image->type; + imgFlags_t flags = image->flags; + GLenum internalFormat = image->internalFormat; + qboolean subtexture = (x != 0) || (y != 0) || (width != image->width) || (height != image->height); + qboolean notScaled = qtrue; + qboolean mipmap = !!(flags & IMGFLAG_MIPMAP); - scaledBuffer = ri.Hunk_AllocateTempMemory( sizeof( unsigned ) * scaled_width * scaled_height ); + if (!data) + { + RawImage_ScaleToPower2(NULL, &width, &height, type, flags, NULL); + RawImage_UploadTexture(NULL, 0, 0, width, height, internalFormat, type, flags, qfalse); + goto done; + } + else if (!subtexture) + { + notScaled = RawImage_ScaleToPower2(&data, &width, &height, type, flags, &resampledBuffer); + } - // - // scan the texture for each channel's max values - // and verify if the alpha channel is being used or not - // c = width*height; scan = data; @@ -1992,100 +1997,28 @@ static void Upload32( byte *data, int width, int height, imgType_t type, imgFlag } if (glRefConfig.swizzleNormalmap && (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT)) - { RawImage_SwizzleRA(data, width, height); - } - // copy or resample data as appropriate for first MIP level - if ( ( scaled_width == width ) && - ( scaled_height == height ) ) { - if (!(flags & IMGFLAG_MIPMAP)) - { - RawImage_UploadTexture( data, 0, 0, scaled_width, scaled_height, internalFormat, type, flags, qfalse ); - //qglTexImage2D (GL_TEXTURE_2D, 0, internalFormat, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); - *pUploadWidth = scaled_width; - *pUploadHeight = scaled_height; + // This corresponds to what the OpenGL1 renderer does + if (!(flags & IMGFLAG_NOLIGHTSCALE) && (!notScaled || mipmap)) + R_LightScaleTexture(data, width, height, !mipmap); - goto done; - } - Com_Memcpy (scaledBuffer, data, width*height*4); - } - else + if (subtexture) { - // use the normal mip-mapping function to go down from here - while ( width > scaled_width || height > scaled_height ) { - - if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) - { - R_MipMapNormalHeight( data, data, width, height, glRefConfig.swizzleNormalmap ); - } - else - { - R_MipMapsRGB( data, width, height ); - } - - width >>= 1; - height >>= 1; - if ( width < 1 ) { - width = 1; - } - if ( height < 1 ) { - height = 1; - } - } - Com_Memcpy( scaledBuffer, data, width * height * 4 ); + // FIXME: Incorrect if original texture was not a power of 2 texture or picmipped + RawImage_UploadTexture(data, x, y, width, height, internalFormat, type, flags, qtrue); + GL_CheckErrors(); + return; } - if (!(flags & IMGFLAG_NOLIGHTSCALE)) - R_LightScaleTexture (scaledBuffer, scaled_width, scaled_height, !(flags & IMGFLAG_MIPMAP) ); - - *pUploadWidth = scaled_width; - *pUploadHeight = scaled_height; - - RawImage_UploadTexture(scaledBuffer, 0, 0, scaled_width, scaled_height, internalFormat, type, flags, qfalse); + RawImage_UploadTexture(data, 0, 0, width, height, internalFormat, type, flags, qfalse); done: - if (flags & IMGFLAG_MIPMAP) - { - if ( textureFilterAnisotropic ) - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, - (GLint)Com_Clamp( 1, maxAnisotropy, r_ext_max_anisotropy->integer ) ); + image->uploadWidth = width; + image->uploadHeight = height; - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); - } - else - { - if ( textureFilterAnisotropic ) - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 ); - - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - } - - GL_CheckErrors(); - - if ( scaledBuffer != 0 ) - ri.Hunk_FreeTempMemory( scaledBuffer ); - if ( resampledBuffer != 0 ) - ri.Hunk_FreeTempMemory( resampledBuffer ); -} - - -static void EmptyTexture( int width, int height, imgType_t type, imgFlags_t flags, - qboolean lightMap, GLenum internalFormat, int *pUploadWidth, int *pUploadHeight ) -{ - int scaled_width, scaled_height; - - RawImage_ScaleToPower2(NULL, &width, &height, &scaled_width, &scaled_height, type, flags, NULL); - - *pUploadWidth = scaled_width; - *pUploadHeight = scaled_height; - - RawImage_UploadTexture(NULL, 0, 0, scaled_width, scaled_height, internalFormat, type, flags, qfalse); - - if (flags & IMGFLAG_MIPMAP) + if (mipmap) { if ( textureFilterAnisotropic ) qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, @@ -2120,6 +2053,9 @@ static void EmptyTexture( int width, int height, imgType_t type, imgFlags_t flag } GL_CheckErrors(); + + if ( resampledBuffer != NULL ) + ri.Hunk_FreeTempMemory( resampledBuffer ); } @@ -2185,9 +2121,10 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgT GL_SelectTexture( image->TMU ); } + GL_Bind(image); + if (image->flags & IMGFLAG_CUBEMAP) { - GL_Bind(image); qglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); qglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); qglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); @@ -2218,20 +2155,7 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgT } else { - GL_Bind(image); - - if (pic) - { - Upload32( pic, image->width, image->height, image->type, image->flags, - isLightmap, image->internalFormat, &image->uploadWidth, - &image->uploadHeight ); - } - else - { - EmptyTexture(image->width, image->height, image->type, image->flags, - isLightmap, image->internalFormat, &image->uploadWidth, - &image->uploadHeight ); - } + Upload32( pic, 0, 0, image->width, image->height, image ); qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode ); qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode ); @@ -2248,86 +2172,15 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgT void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height ) { - byte *scaledBuffer = NULL; - byte *resampledBuffer = NULL; - int scaled_width, scaled_height, scaled_x, scaled_y; - byte *data = pic; - - if (glRefConfig.swizzleNormalmap && (image->type == IMGTYPE_NORMAL || image->type == IMGTYPE_NORMALHEIGHT)) - { - RawImage_SwizzleRA(pic, width, height); + if (qglActiveTextureARB) { + GL_SelectTexture(image->TMU); } - RawImage_ScaleToPower2(&pic, &width, &height, &scaled_width, &scaled_height, image->type, image->flags, &resampledBuffer); + GL_Bind(image); - scaledBuffer = ri.Hunk_AllocateTempMemory( sizeof( unsigned ) * scaled_width * scaled_height ); + Upload32(pic, x, y, width, height, image); - if ( qglActiveTextureARB ) { - GL_SelectTexture( image->TMU ); - } - - GL_Bind(image); - - // copy or resample data as appropriate for first MIP level - if ( ( scaled_width == width ) && - ( scaled_height == height ) ) { - if (!(image->flags & IMGFLAG_MIPMAP)) - { - scaled_x = x * scaled_width / width; - scaled_y = y * scaled_height / height; - RawImage_UploadTexture( data, scaled_x, scaled_y, scaled_width, scaled_height, image->internalFormat, image->type, image->flags, qtrue ); - //qglTexSubImage2D( GL_TEXTURE_2D, 0, scaled_x, scaled_y, scaled_width, scaled_height, GL_RGBA, GL_UNSIGNED_BYTE, data ); - - GL_CheckErrors(); - goto done; - } - Com_Memcpy (scaledBuffer, data, width*height*4); - } - else - { - // use the normal mip-mapping function to go down from here - while ( width > scaled_width || height > scaled_height ) { - - if (image->type == IMGTYPE_NORMAL || image->type == IMGTYPE_NORMALHEIGHT) - { - R_MipMapNormalHeight( data, data, width, height, glRefConfig.swizzleNormalmap ); - } - else - { - R_MipMapsRGB( data, width, height ); - } - - width >>= 1; - height >>= 1; - x >>= 1; - y >>= 1; - if ( width < 1 ) { - width = 1; - } - if ( height < 1 ) { - height = 1; - } - } - Com_Memcpy( scaledBuffer, data, width * height * 4 ); - } - - if (!(image->flags & IMGFLAG_NOLIGHTSCALE)) - R_LightScaleTexture (scaledBuffer, scaled_width, scaled_height, !(image->flags & IMGFLAG_MIPMAP) ); - - scaled_x = x * scaled_width / width; - scaled_y = y * scaled_height / height; - RawImage_UploadTexture( (byte *)data, scaled_x, scaled_y, scaled_width, scaled_height, image->internalFormat, image->type, image->flags, qtrue ); - -done: - - GL_SelectTexture( 0 ); - - GL_CheckErrors(); - - if ( scaledBuffer != 0 ) - ri.Hunk_FreeTempMemory( scaledBuffer ); - if ( resampledBuffer != 0 ) - ri.Hunk_FreeTempMemory( resampledBuffer ); + GL_SelectTexture(0); } //=================================================================== From f965f3c66e6cf8c4220982d1d03fd384b0774cbc Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 18 Dec 2015 06:53:20 -0800 Subject: [PATCH 079/480] OpenGL2: DDS (compressed textures) support. --- Makefile | 1 + code/renderergl2/tr_image.c | 130 +++++++-- code/renderergl2/tr_image_dds.c | 448 ++++++++++++++++++++++++++++++++ 3 files changed, 564 insertions(+), 15 deletions(-) create mode 100644 code/renderergl2/tr_image_dds.c diff --git a/Makefile b/Makefile index 3df83660..26ef512e 100644 --- a/Makefile +++ b/Makefile @@ -1664,6 +1664,7 @@ Q3R2OBJ = \ $(B)/renderergl2/tr_image_pcx.o \ $(B)/renderergl2/tr_image_png.o \ $(B)/renderergl2/tr_image_tga.o \ + $(B)/renderergl2/tr_image_dds.o \ $(B)/renderergl2/tr_init.o \ $(B)/renderergl2/tr_light.o \ $(B)/renderergl2/tr_main.o \ diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index 59d4fd8c..0b725beb 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -1615,13 +1615,16 @@ static qboolean RawImage_HasAlpha(const byte *scan, int numPixels) return qfalse; } -static GLenum RawImage_GetFormat(const byte *data, int numPixels, qboolean lightMap, imgType_t type, imgFlags_t flags) +static GLenum RawImage_GetFormat(const byte *data, int numPixels, GLenum picFormat, qboolean lightMap, imgType_t type, imgFlags_t flags) { int samples = 3; GLenum internalFormat = GL_RGB; qboolean forceNoCompression = (flags & IMGFLAG_NO_COMPRESSION); qboolean normalmap = (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT); + if (picFormat != GL_RGBA8) + return picFormat; + if(normalmap) { if ((type == IMGTYPE_NORMALHEIGHT) && RawImage_HasAlpha(data, numPixels)) @@ -1860,11 +1863,67 @@ static void RawImage_UploadToRgtc2Texture(byte *data, int width, int height, int } -static void RawImage_UploadTexture( byte *data, int x, int y, int width, int height, GLenum internalFormat, imgType_t type, imgFlags_t flags, qboolean subtexture ) +static void RawImage_UploadTexture( byte *data, int x, int y, int width, int height, GLenum picFormat, int numMips, GLenum internalFormat, imgType_t type, imgFlags_t flags, qboolean subtexture ) { int dataFormat, dataType; qboolean rgtc = (internalFormat == GL_COMPRESSED_RG_RGTC2); + if (picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT) + { + int bytesPer4x4Block = 0; + int miplevel = 0; + + switch (picFormat) + { + case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: + case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: + case GL_COMPRESSED_RED_RGTC1: + case GL_COMPRESSED_SIGNED_RED_RGTC1: + bytesPer4x4Block = 8; + break; + case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: + case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: + case GL_COMPRESSED_RG_RGTC2: + case GL_COMPRESSED_SIGNED_RG_RGTC2: + case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB: + case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB: + case GL_COMPRESSED_RGBA_BPTC_UNORM_ARB: + case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB: + bytesPer4x4Block = 16; + break; + default: + ri.Printf(PRINT_ALL, "Unsupported texture format %08x\n", picFormat); + return; + break; + } + + for (miplevel = 0; miplevel < numMips; miplevel++) + { + int size; + + size = ((width + 3) / 4) * ((height + 3) / 4) * bytesPer4x4Block; + + if (subtexture) + qglCompressedTexSubImage2DARB(GL_TEXTURE_2D, miplevel, x, y, width, height, internalFormat, size, data); + else + qglCompressedTexImage2DARB(GL_TEXTURE_2D, miplevel, internalFormat, width, height, 0, size, data); + + x >>= 1; + y >>= 1; + x -= x % 4; + y -= y % 4; + + width = MAX(1, width >> 1); + height = MAX(1, height >> 1); + data += size; + } + + return; + } + switch(internalFormat) { case GL_DEPTH_COMPONENT: @@ -1948,7 +2007,7 @@ Upload32 =============== */ -static void Upload32(byte *data, int x, int y, int width, int height, image_t *image) +static void Upload32(byte *data, int x, int y, int width, int height, GLenum picFormat, int numMips, image_t *image) { byte *resampledBuffer = NULL; int i, c; @@ -1964,11 +2023,16 @@ static void Upload32(byte *data, int x, int y, int width, int height, image_t *i if (!data) { RawImage_ScaleToPower2(NULL, &width, &height, type, flags, NULL); - RawImage_UploadTexture(NULL, 0, 0, width, height, internalFormat, type, flags, qfalse); + RawImage_UploadTexture(NULL, 0, 0, width, height, GL_RGBA8, 0, internalFormat, type, flags, qfalse); goto done; } else if (!subtexture) { + if (picFormat != GL_RGBA8) + { + RawImage_UploadTexture(data, 0, 0, width, height, picFormat, numMips, internalFormat, type, flags, qfalse); + goto done; + } notScaled = RawImage_ScaleToPower2(&data, &width, &height, type, flags, &resampledBuffer); } @@ -2006,12 +2070,12 @@ static void Upload32(byte *data, int x, int y, int width, int height, image_t *i if (subtexture) { // FIXME: Incorrect if original texture was not a power of 2 texture or picmipped - RawImage_UploadTexture(data, x, y, width, height, internalFormat, type, flags, qtrue); + RawImage_UploadTexture(data, x, y, width, height, GL_RGBA8, 0, internalFormat, type, flags, qtrue); GL_CheckErrors(); return; } - RawImage_UploadTexture(data, 0, 0, width, height, internalFormat, type, flags, qfalse); + RawImage_UploadTexture(data, 0, 0, width, height, GL_RGBA8, 0, internalFormat, type, flags, qfalse); done: @@ -2061,12 +2125,12 @@ done: /* ================ -R_CreateImage +R_CreateImage2 This is the only way any image_t are created ================ */ -image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgType_t type, imgFlags_t flags, int internalFormat ) { +image_t *R_CreateImage2( const char *name, byte *pic, int width, int height, GLenum picFormat, int numMips, imgType_t type, imgFlags_t flags, int internalFormat ) { image_t *image; qboolean isLightmap = qfalse; long hash; @@ -2104,7 +2168,7 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgT if (image->flags & IMGFLAG_CUBEMAP) internalFormat = GL_RGBA8; else - internalFormat = RawImage_GetFormat(pic, width * height, isLightmap, image->type, image->flags); + internalFormat = RawImage_GetFormat(pic, width * height, picFormat, isLightmap, image->type, image->flags); } image->internalFormat = internalFormat; @@ -2155,7 +2219,7 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgT } else { - Upload32( pic, 0, 0, image->width, image->height, image ); + Upload32( pic, 0, 0, image->width, image->height, picFormat, numMips, image ); qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode ); qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode ); @@ -2170,6 +2234,20 @@ image_t *R_CreateImage( const char *name, byte *pic, int width, int height, imgT return image; } + +/* +================ +R_CreateImage + +Wrapper for R_CreateImage2(), for the old parameters. +================ +*/ +image_t *R_CreateImage(const char *name, byte *pic, int width, int height, imgType_t type, imgFlags_t flags, int internalFormat) +{ + return R_CreateImage2(name, pic, width, height, GL_RGBA8, 0, type, flags, internalFormat); +} + + void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height ) { if (qglActiveTextureARB) { @@ -2178,13 +2256,16 @@ void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int h GL_Bind(image); - Upload32(pic, x, y, width, height, image); + Upload32(pic, x, y, width, height, GL_RGBA8, 0, image); GL_SelectTexture(0); } //=================================================================== +// Prototype for dds loader function which isn't common to both renderers +void R_LoadDDS(const char *filename, byte **pic, int *width, int *height, GLenum *picFormat, int *numMips); + typedef struct { char *ext; @@ -2213,7 +2294,7 @@ Loads any of the supported image types into a cannonical 32 bit format. ================= */ -void R_LoadImage( const char *name, byte **pic, int *width, int *height ) +void R_LoadImage( const char *name, byte **pic, int *width, int *height, GLenum *picFormat, int *numMips ) { qboolean orgNameFailed = qfalse; int orgLoader = -1; @@ -2225,11 +2306,28 @@ void R_LoadImage( const char *name, byte **pic, int *width, int *height ) *pic = NULL; *width = 0; *height = 0; + *picFormat = GL_RGBA8; + *numMips = 0; Q_strncpyz( localName, name, MAX_QPATH ); ext = COM_GetExtension( localName ); + // If compressed textures are enabled, try loading a DDS first, it'll load fastest + if (r_ext_compressed_textures->integer) + { + char ddsName[MAX_QPATH]; + + COM_StripExtension(name, ddsName, MAX_QPATH); + Q_strcat(ddsName, MAX_QPATH, ".dds"); + + R_LoadDDS(ddsName, pic, width, height, picFormat, numMips); + + // If loaded, we're done. + if (*pic) + return; + } + if( *ext ) { // Look for the correct loader and use it @@ -2301,6 +2399,8 @@ image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags ) image_t *image; int width, height; byte *pic; + GLenum picFormat; + int picNumMips; long hash; if (!name) { @@ -2327,12 +2427,12 @@ image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags ) // // load the pic from disk // - R_LoadImage( name, &pic, &width, &height ); + R_LoadImage( name, &pic, &width, &height, &picFormat, &picNumMips ); if ( pic == NULL ) { return NULL; } - if (r_normalMapping->integer && !(type == IMGTYPE_NORMAL) && (flags & IMGFLAG_PICMIP) && (flags & IMGFLAG_MIPMAP) && (flags & IMGFLAG_GENNORMALMAP)) + if (r_normalMapping->integer && (picFormat == GL_RGBA8) && !(type == IMGTYPE_NORMAL) && (flags & IMGFLAG_PICMIP) && (flags & IMGFLAG_MIPMAP) && (flags & IMGFLAG_GENNORMALMAP)) { char normalName[MAX_QPATH]; image_t *normalImage; @@ -2435,7 +2535,7 @@ image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags ) } } - image = R_CreateImage( ( char * ) name, pic, width, height, type, flags, 0 ); + image = R_CreateImage2( ( char * ) name, pic, width, height, picFormat, picNumMips, type, flags, 0 ); ri.Free( pic ); return image; } diff --git a/code/renderergl2/tr_image_dds.c b/code/renderergl2/tr_image_dds.c new file mode 100644 index 00000000..578b3eda --- /dev/null +++ b/code/renderergl2/tr_image_dds.c @@ -0,0 +1,448 @@ +/* +=========================================================================== +Copyright (C) 1999-2005 Id Software, Inc. + 2015 James Canete + +This file is part of Quake III Arena source code. + +Quake III Arena source code 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. + +Quake III Arena source code 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 Quake III Arena source code; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ + +#include "../renderercommon/tr_common.h" + +typedef unsigned int ui32_t; + +typedef struct ddsHeader_s +{ + ui32_t headerSize; + ui32_t flags; + ui32_t height; + ui32_t width; + ui32_t pitchOrFirstMipSize; + ui32_t volumeDepth; + ui32_t numMips; + ui32_t reserved1[11]; + ui32_t always_0x00000020; + ui32_t pixelFormatFlags; + ui32_t fourCC; + ui32_t rgbBitCount; + ui32_t rBitMask; + ui32_t gBitMask; + ui32_t bBitMask; + ui32_t aBitMask; + ui32_t caps; + ui32_t caps2; + ui32_t caps3; + ui32_t caps4; + ui32_t reserved2; +} +ddsHeader_t; + +// flags: +#define _DDSFLAGS_REQUIRED 0x001007 +#define _DDSFLAGS_PITCH 0x8 +#define _DDSFLAGS_MIPMAPCOUNT 0x20000 +#define _DDSFLAGS_FIRSTMIPSIZE 0x80000 +#define _DDSFLAGS_VOLUMEDEPTH 0x800000 + +// pixelFormatFlags: +#define DDSPF_ALPHAPIXELS 0x1 +#define DDSPF_ALPHA 0x2 +#define DDSPF_FOURCC 0x4 +#define DDSPF_RGB 0x40 +#define DDSPF_YUV 0x200 +#define DDSPF_LUMINANCE 0x20000 + +// caps: +#define DDSCAPS_COMPLEX 0x8 +#define DDSCAPS_MIPMAP 0x400000 +#define DDSCAPS_REQUIRED 0x1000 + +// caps2: +#define DDSCAPS2_CUBEMAP 0xFE00 +#define DDSCAPS2_VOLUME 0x200000 + +typedef struct ddsHeaderDxt10_s +{ + ui32_t dxgiFormat; + ui32_t dimensions; + ui32_t miscFlags; + ui32_t arraySize; + ui32_t miscFlags2; +} +ddsHeaderDxt10_t; + +// dxgiFormat +// from http://msdn.microsoft.com/en-us/library/windows/desktop/bb173059%28v=vs.85%29.aspx +typedef enum DXGI_FORMAT { + DXGI_FORMAT_UNKNOWN = 0, + DXGI_FORMAT_R32G32B32A32_TYPELESS = 1, + DXGI_FORMAT_R32G32B32A32_FLOAT = 2, + DXGI_FORMAT_R32G32B32A32_UINT = 3, + DXGI_FORMAT_R32G32B32A32_SINT = 4, + DXGI_FORMAT_R32G32B32_TYPELESS = 5, + DXGI_FORMAT_R32G32B32_FLOAT = 6, + DXGI_FORMAT_R32G32B32_UINT = 7, + DXGI_FORMAT_R32G32B32_SINT = 8, + DXGI_FORMAT_R16G16B16A16_TYPELESS = 9, + DXGI_FORMAT_R16G16B16A16_FLOAT = 10, + DXGI_FORMAT_R16G16B16A16_UNORM = 11, + DXGI_FORMAT_R16G16B16A16_UINT = 12, + DXGI_FORMAT_R16G16B16A16_SNORM = 13, + DXGI_FORMAT_R16G16B16A16_SINT = 14, + DXGI_FORMAT_R32G32_TYPELESS = 15, + DXGI_FORMAT_R32G32_FLOAT = 16, + DXGI_FORMAT_R32G32_UINT = 17, + DXGI_FORMAT_R32G32_SINT = 18, + DXGI_FORMAT_R32G8X24_TYPELESS = 19, + DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20, + DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21, + DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22, + DXGI_FORMAT_R10G10B10A2_TYPELESS = 23, + DXGI_FORMAT_R10G10B10A2_UNORM = 24, + DXGI_FORMAT_R10G10B10A2_UINT = 25, + DXGI_FORMAT_R11G11B10_FLOAT = 26, + DXGI_FORMAT_R8G8B8A8_TYPELESS = 27, + DXGI_FORMAT_R8G8B8A8_UNORM = 28, + DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29, + DXGI_FORMAT_R8G8B8A8_UINT = 30, + DXGI_FORMAT_R8G8B8A8_SNORM = 31, + DXGI_FORMAT_R8G8B8A8_SINT = 32, + DXGI_FORMAT_R16G16_TYPELESS = 33, + DXGI_FORMAT_R16G16_FLOAT = 34, + DXGI_FORMAT_R16G16_UNORM = 35, + DXGI_FORMAT_R16G16_UINT = 36, + DXGI_FORMAT_R16G16_SNORM = 37, + DXGI_FORMAT_R16G16_SINT = 38, + DXGI_FORMAT_R32_TYPELESS = 39, + DXGI_FORMAT_D32_FLOAT = 40, + DXGI_FORMAT_R32_FLOAT = 41, + DXGI_FORMAT_R32_UINT = 42, + DXGI_FORMAT_R32_SINT = 43, + DXGI_FORMAT_R24G8_TYPELESS = 44, + DXGI_FORMAT_D24_UNORM_S8_UINT = 45, + DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46, + DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47, + DXGI_FORMAT_R8G8_TYPELESS = 48, + DXGI_FORMAT_R8G8_UNORM = 49, + DXGI_FORMAT_R8G8_UINT = 50, + DXGI_FORMAT_R8G8_SNORM = 51, + DXGI_FORMAT_R8G8_SINT = 52, + DXGI_FORMAT_R16_TYPELESS = 53, + DXGI_FORMAT_R16_FLOAT = 54, + DXGI_FORMAT_D16_UNORM = 55, + DXGI_FORMAT_R16_UNORM = 56, + DXGI_FORMAT_R16_UINT = 57, + DXGI_FORMAT_R16_SNORM = 58, + DXGI_FORMAT_R16_SINT = 59, + DXGI_FORMAT_R8_TYPELESS = 60, + DXGI_FORMAT_R8_UNORM = 61, + DXGI_FORMAT_R8_UINT = 62, + DXGI_FORMAT_R8_SNORM = 63, + DXGI_FORMAT_R8_SINT = 64, + DXGI_FORMAT_A8_UNORM = 65, + DXGI_FORMAT_R1_UNORM = 66, + DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67, + DXGI_FORMAT_R8G8_B8G8_UNORM = 68, + DXGI_FORMAT_G8R8_G8B8_UNORM = 69, + DXGI_FORMAT_BC1_TYPELESS = 70, + DXGI_FORMAT_BC1_UNORM = 71, + DXGI_FORMAT_BC1_UNORM_SRGB = 72, + DXGI_FORMAT_BC2_TYPELESS = 73, + DXGI_FORMAT_BC2_UNORM = 74, + DXGI_FORMAT_BC2_UNORM_SRGB = 75, + DXGI_FORMAT_BC3_TYPELESS = 76, + DXGI_FORMAT_BC3_UNORM = 77, + DXGI_FORMAT_BC3_UNORM_SRGB = 78, + DXGI_FORMAT_BC4_TYPELESS = 79, + DXGI_FORMAT_BC4_UNORM = 80, + DXGI_FORMAT_BC4_SNORM = 81, + DXGI_FORMAT_BC5_TYPELESS = 82, + DXGI_FORMAT_BC5_UNORM = 83, + DXGI_FORMAT_BC5_SNORM = 84, + DXGI_FORMAT_B5G6R5_UNORM = 85, + DXGI_FORMAT_B5G5R5A1_UNORM = 86, + DXGI_FORMAT_B8G8R8A8_UNORM = 87, + DXGI_FORMAT_B8G8R8X8_UNORM = 88, + DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89, + DXGI_FORMAT_B8G8R8A8_TYPELESS = 90, + DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91, + DXGI_FORMAT_B8G8R8X8_TYPELESS = 92, + DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93, + DXGI_FORMAT_BC6H_TYPELESS = 94, + DXGI_FORMAT_BC6H_UF16 = 95, + DXGI_FORMAT_BC6H_SF16 = 96, + DXGI_FORMAT_BC7_TYPELESS = 97, + DXGI_FORMAT_BC7_UNORM = 98, + DXGI_FORMAT_BC7_UNORM_SRGB = 99, + DXGI_FORMAT_AYUV = 100, + DXGI_FORMAT_Y410 = 101, + DXGI_FORMAT_Y416 = 102, + DXGI_FORMAT_NV12 = 103, + DXGI_FORMAT_P010 = 104, + DXGI_FORMAT_P016 = 105, + DXGI_FORMAT_420_OPAQUE = 106, + DXGI_FORMAT_YUY2 = 107, + DXGI_FORMAT_Y210 = 108, + DXGI_FORMAT_Y216 = 109, + DXGI_FORMAT_NV11 = 110, + DXGI_FORMAT_AI44 = 111, + DXGI_FORMAT_IA44 = 112, + DXGI_FORMAT_P8 = 113, + DXGI_FORMAT_A8P8 = 114, + DXGI_FORMAT_B4G4R4A4_UNORM = 115, + DXGI_FORMAT_FORCE_UINT = 0xffffffffUL +} DXGI_FORMAT; + +#define EncodeFourCC(x) ((((ui32_t)((x)[0])) ) | \ + (((ui32_t)((x)[1])) << 8 ) | \ + (((ui32_t)((x)[2])) << 16) | \ + (((ui32_t)((x)[3])) << 24) ) + + +void R_LoadDDS ( const char *filename, byte **pic, int *width, int *height, GLenum *picFormat, int *numMips ) +{ + union { + byte *b; + void *v; + } buffer; + int len; + ddsHeader_t *ddsHeader = NULL; + ddsHeaderDxt10_t *ddsHeaderDxt10 = NULL; + byte *data; + + if (!picFormat) + { + ri.Printf(PRINT_ERROR, "R_LoadDDS() called without picFormat parameter!"); + return; + } + + if (width) + *width = 0; + if (height) + *height = 0; + if (picFormat) + *picFormat = GL_RGBA8; + if (numMips) + *numMips = 1; + + *pic = NULL; + + // + // load the file + // + len = ri.FS_ReadFile( ( char * ) filename, &buffer.v); + if (!buffer.b || len < 0) { + return; + } + + // + // reject files that are too small to hold even a header + // + if (len < 4 + sizeof(*ddsHeader)) + { + ri.Printf(PRINT_ALL, "File %s is too small to be a DDS file.\n", filename); + ri.FS_FreeFile(buffer.v); + return; + } + + // + // reject files that don't start with "DDS " + // + if (*((ui32_t *)(buffer.b)) != EncodeFourCC("DDS ")) + { + ri.Printf(PRINT_ALL, "File %s is not a DDS file.\n", filename); + ri.FS_FreeFile(buffer.v); + return; + } + + // + // parse header and dx10 header if available + // + ddsHeader = (ddsHeader_t *)(buffer.b + 4); + if ((ddsHeader->pixelFormatFlags & DDSPF_FOURCC) && ddsHeader->fourCC == EncodeFourCC("DX10")) + { + if (len < 4 + sizeof(*ddsHeader) + sizeof(*ddsHeaderDxt10)) + { + ri.Printf(PRINT_ALL, "File %s indicates a DX10 header it is too small to contain.\n", filename); + ri.FS_FreeFile(buffer.v); + return; + } + + ddsHeaderDxt10 = (ddsHeaderDxt10_t *)(buffer.b + 4 + sizeof(ddsHeader_t)); + data = buffer.b + 4 + sizeof(*ddsHeader) + sizeof(*ddsHeaderDxt10); + len -= 4 + sizeof(*ddsHeader) + sizeof(*ddsHeaderDxt10); + } + else + { + data = buffer.b + 4 + sizeof(*ddsHeader); + len -= 4 + sizeof(*ddsHeader); + } + + *width = ddsHeader->width; + *height = ddsHeader->height; + + if (ddsHeader->flags & _DDSFLAGS_MIPMAPCOUNT) + *numMips = ddsHeader->numMips; + else + *numMips = 1; + + // FIXME: handle cube map + //if ((ddsHeader->caps2 & DDSCAPS2_CUBEMAP) == DDSCAPS2_CUBEMAP) + + // + // Convert DXGI format/FourCC into OpenGL format + // + if (ddsHeaderDxt10) + { + switch (ddsHeaderDxt10->dxgiFormat) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + // FIXME: check for GL_COMPRESSED_RGBA_S3TC_DXT1_EXT + *picFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; + break; + + case DXGI_FORMAT_BC1_UNORM_SRGB: + // FIXME: check for GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT + *picFormat = GL_COMPRESSED_SRGB_S3TC_DXT1_EXT; + break; + + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + *picFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; + break; + + case DXGI_FORMAT_BC2_UNORM_SRGB: + *picFormat = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT; + break; + + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + *picFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; + break; + + case DXGI_FORMAT_BC3_UNORM_SRGB: + *picFormat = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT; + break; + + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + *picFormat = GL_COMPRESSED_RED_RGTC1; + break; + + case DXGI_FORMAT_BC4_SNORM: + *picFormat = GL_COMPRESSED_SIGNED_RED_RGTC1; + break; + + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + *picFormat = GL_COMPRESSED_RG_RGTC2; + break; + + case DXGI_FORMAT_BC5_SNORM: + *picFormat = GL_COMPRESSED_SIGNED_RG_RGTC2; + break; + + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + *picFormat = GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB; + break; + + case DXGI_FORMAT_BC6H_SF16: + *picFormat = GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB; + break; + + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + *picFormat = GL_COMPRESSED_RGBA_BPTC_UNORM_ARB; + break; + + case DXGI_FORMAT_BC7_UNORM_SRGB: + *picFormat = GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB; + break; + + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + *picFormat = GL_SRGB8_ALPHA8_EXT; + break; + + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_SNORM: + *picFormat = GL_RGBA8; + break; + + default: + ri.Printf(PRINT_ALL, "DDS File %s has unsupported DXGI format %d.", filename, ddsHeaderDxt10->dxgiFormat); + ri.FS_FreeFile(buffer.v); + return; + break; + } + } + else + { + if (ddsHeader->pixelFormatFlags & DDSPF_FOURCC) + { + if (ddsHeader->fourCC == EncodeFourCC("DXT1")) + *picFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; + else if (ddsHeader->fourCC == EncodeFourCC("DXT2")) + *picFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; + else if (ddsHeader->fourCC == EncodeFourCC("DXT3")) + *picFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; + else if (ddsHeader->fourCC == EncodeFourCC("DXT4")) + *picFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; + else if (ddsHeader->fourCC == EncodeFourCC("DXT5")) + *picFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; + else if (ddsHeader->fourCC == EncodeFourCC("ATI1")) + *picFormat = GL_COMPRESSED_RED_RGTC1; + else if (ddsHeader->fourCC == EncodeFourCC("BC4U")) + *picFormat = GL_COMPRESSED_RED_RGTC1; + else if (ddsHeader->fourCC == EncodeFourCC("BC4S")) + *picFormat = GL_COMPRESSED_SIGNED_RED_RGTC1; + else if (ddsHeader->fourCC == EncodeFourCC("ATI2")) + *picFormat = GL_COMPRESSED_RG_RGTC2; + else if (ddsHeader->fourCC == EncodeFourCC("BC5U")) + *picFormat = GL_COMPRESSED_RG_RGTC2; + else if (ddsHeader->fourCC == EncodeFourCC("BC5S")) + *picFormat = GL_COMPRESSED_SIGNED_RG_RGTC2; + else + { + ri.Printf(PRINT_ALL, "DDS File %s has unsupported FourCC.", filename); + ri.FS_FreeFile(buffer.v); + return; + } + } + else if (ddsHeader->pixelFormatFlags == (DDSPF_RGB | DDSPF_ALPHAPIXELS) + && ddsHeader->rgbBitCount == 32 + && ddsHeader->rBitMask == 0x000000ff + && ddsHeader->gBitMask == 0x0000ff00 + && ddsHeader->bBitMask == 0x00ff0000 + && ddsHeader->aBitMask == 0xff000000) + { + *picFormat = GL_RGBA8; + } + else + { + ri.Printf(PRINT_ALL, "DDS File %s has unsupported RGBA format.", filename); + ri.FS_FreeFile(buffer.v); + return; + } + } + + *pic = ri.Malloc(len); + Com_Memcpy(*pic, data, len); + + ri.FS_FreeFile(buffer.v); +} From f78d04eba876545e08dccc5b78dff6f9db14753d Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 18 Dec 2015 19:42:15 -0800 Subject: [PATCH 080/480] OpenGL2: Add null dereference checks to DDS loader. --- code/renderergl2/tr_image_dds.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/code/renderergl2/tr_image_dds.c b/code/renderergl2/tr_image_dds.c index 578b3eda..8ad406fd 100644 --- a/code/renderergl2/tr_image_dds.c +++ b/code/renderergl2/tr_image_dds.c @@ -292,13 +292,18 @@ void R_LoadDDS ( const char *filename, byte **pic, int *width, int *height, GLen len -= 4 + sizeof(*ddsHeader); } - *width = ddsHeader->width; - *height = ddsHeader->height; + if (width) + *width = ddsHeader->width; + if (height) + *height = ddsHeader->height; - if (ddsHeader->flags & _DDSFLAGS_MIPMAPCOUNT) - *numMips = ddsHeader->numMips; - else - *numMips = 1; + if (numMips) + { + if (ddsHeader->flags & _DDSFLAGS_MIPMAPCOUNT) + *numMips = ddsHeader->numMips; + else + *numMips = 1; + } // FIXME: handle cube map //if ((ddsHeader->caps2 & DDSCAPS2_CUBEMAP) == DDSCAPS2_CUBEMAP) From d8fd07b69a431a91af4372bc63c81c2c966a5dff Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Sun, 20 Dec 2015 03:08:50 -0800 Subject: [PATCH 081/480] Make jpeg loading errors non-fatal. --- code/renderercommon/tr_image_jpg.c | 43 ++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/code/renderercommon/tr_image_jpg.c b/code/renderercommon/tr_image_jpg.c index 3bf44bbb..9cb56c88 100644 --- a/code/renderercommon/tr_image_jpg.c +++ b/code/renderercommon/tr_image_jpg.c @@ -20,6 +20,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ +#include + #include "tr_common.h" /* @@ -42,16 +44,27 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # endif #endif -static void __attribute__((__noreturn__)) R_JPGErrorExit(j_common_ptr cinfo) +/* Catching errors, as done in libjpeg's example.c */ +typedef struct q_jpeg_error_mgr_s +{ + struct jpeg_error_mgr pub; /* "public" fields */ + + jmp_buf setjmp_buffer; /* for return to caller */ +} q_jpeg_error_mgr_t; + +static void R_JPGErrorExit(j_common_ptr cinfo) { char buffer[JMSG_LENGTH_MAX]; + + /* cinfo->err really points to a q_jpeg_error_mgr_s struct, so coerce pointer */ + q_jpeg_error_mgr_t *jerr = (q_jpeg_error_mgr_t *)cinfo->err; (*cinfo->err->format_message) (cinfo, buffer); - - /* Let the memory manager delete any temp files before we die */ - jpeg_destroy(cinfo); - - ri.Error(ERR_FATAL, "%s", buffer); + + ri.Printf(PRINT_ALL, "R_LoadJPG() error: %s", buffer); + + /* Return control to the setjmp point */ + longjmp(jerr->setjmp_buffer, 1); } static void R_JPGOutputMessage(j_common_ptr cinfo) @@ -83,7 +96,7 @@ void R_LoadJPG(const char *filename, unsigned char **pic, int *width, int *heigh * Note that this struct must live as long as the main JPEG parameter * struct, to avoid dangling-pointer problems. */ - struct jpeg_error_mgr jerr; + q_jpeg_error_mgr_t jerr; /* More stuff */ JSAMPARRAY buffer; /* Output row buffer */ unsigned int row_stride; /* physical row width in output buffer */ @@ -115,10 +128,24 @@ void R_LoadJPG(const char *filename, unsigned char **pic, int *width, int *heigh * This routine fills in the contents of struct jerr, and returns jerr's * address which we place into the link field in cinfo. */ - cinfo.err = jpeg_std_error(&jerr); + cinfo.err = jpeg_std_error(&jerr.pub); cinfo.err->error_exit = R_JPGErrorExit; cinfo.err->output_message = R_JPGOutputMessage; + /* Establish the setjmp return context for R_JPGErrorExit to use. */ + if (setjmp(jerr.setjmp_buffer)) + { + /* If we get here, the JPEG code has signaled an error. + * We need to clean up the JPEG object, close the input file, and return. + */ + jpeg_destroy_decompress(&cinfo); + ri.FS_FreeFile(fbuffer.v); + + /* Append the filename to the error for easier debugging */ + ri.Printf(PRINT_ALL, ", file %s\n", filename); + return; + } + /* Now we can initialize the JPEG decompression object. */ jpeg_create_decompress(&cinfo); From e25035672dee5036993c53fe7c77635e1476c70f Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 21 Dec 2015 01:05:55 -0800 Subject: [PATCH 082/480] Fix error handling in RE_SaveJPGToBuffer(). --- code/renderercommon/tr_image_jpg.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/code/renderercommon/tr_image_jpg.c b/code/renderercommon/tr_image_jpg.c index 9cb56c88..a9bbca15 100644 --- a/code/renderercommon/tr_image_jpg.c +++ b/code/renderercommon/tr_image_jpg.c @@ -61,7 +61,7 @@ static void R_JPGErrorExit(j_common_ptr cinfo) (*cinfo->err->format_message) (cinfo, buffer); - ri.Printf(PRINT_ALL, "R_LoadJPG() error: %s", buffer); + ri.Printf(PRINT_ALL, "Error: %s", buffer); /* Return control to the setjmp point */ longjmp(jerr->setjmp_buffer, 1); @@ -142,7 +142,7 @@ void R_LoadJPG(const char *filename, unsigned char **pic, int *width, int *heigh ri.FS_FreeFile(fbuffer.v); /* Append the filename to the error for easier debugging */ - ri.Printf(PRINT_ALL, ", file %s\n", filename); + ri.Printf(PRINT_ALL, ", loading file %s\n", filename); return; } @@ -388,17 +388,29 @@ size_t RE_SaveJPGToBuffer(byte *buffer, size_t bufSize, int quality, int image_width, int image_height, byte *image_buffer, int padding) { struct jpeg_compress_struct cinfo; - struct jpeg_error_mgr jerr; + q_jpeg_error_mgr_t jerr; JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ my_dest_ptr dest; int row_stride; /* physical row width in image buffer */ size_t outcount; /* Step 1: allocate and initialize JPEG compression object */ - cinfo.err = jpeg_std_error(&jerr); + cinfo.err = jpeg_std_error(&jerr.pub); cinfo.err->error_exit = R_JPGErrorExit; cinfo.err->output_message = R_JPGOutputMessage; + /* Establish the setjmp return context for R_JPGErrorExit to use. */ + if (setjmp(jerr.setjmp_buffer)) + { + /* If we get here, the JPEG code has signaled an error. + * We need to clean up the JPEG object and return. + */ + jpeg_destroy_compress(&cinfo); + + ri.Printf(PRINT_ALL, "\n"); + return 0; + } + /* Now we can initialize the JPEG compression object. */ jpeg_create_compress(&cinfo); From 06feb6115b150eb8e060412d37e4976b7bc86bec Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 21 Dec 2015 20:24:19 -0800 Subject: [PATCH 083/480] OpenGL2: Support picmip for DDS textures. --- code/renderergl2/tr_image.c | 44 ++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index 0b725beb..9bdfece9 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -1868,7 +1868,7 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei int dataFormat, dataType; qboolean rgtc = (internalFormat == GL_COMPRESSED_RG_RGTC2); - if (picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT) + if (data && picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT) { int bytesPer4x4Block = 0; int miplevel = 0; @@ -1876,6 +1876,7 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei switch (picFormat) { case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: + case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: case GL_COMPRESSED_RED_RGTC1: @@ -1900,11 +1901,26 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei break; } + if (flags & IMGFLAG_PICMIP) + { + for (miplevel = r_picmip->integer; miplevel > 0 && numMips > 1; miplevel--, numMips--) + { + int size = ((width + 3) / 4) * ((height + 3) / 4) * bytesPer4x4Block; + + x >>= 1; + y >>= 1; + width = MAX(1, width >> 1); + height = MAX(1, height >> 1); + data += size; + } + } + + if (!(flags & IMGFLAG_MIPMAP)) + numMips = 1; + for (miplevel = 0; miplevel < numMips; miplevel++) { - int size; - - size = ((width + 3) / 4) * ((height + 3) / 4) * bytesPer4x4Block; + int size = ((width + 3) / 4) * ((height + 3) / 4) * bytesPer4x4Block; if (subtexture) qglCompressedTexSubImage2DARB(GL_TEXTURE_2D, miplevel, x, y, width, height, internalFormat, size, data); @@ -1913,9 +1929,6 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei x >>= 1; y >>= 1; - x -= x % 4; - y -= y % 4; - width = MAX(1, width >> 1); height = MAX(1, height >> 1); data += size; @@ -1955,29 +1968,20 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei if (flags & IMGFLAG_MIPMAP) { - int miplevel; + int miplevel = 0; - miplevel = 0; while (width > 1 || height > 1) { if (data) { if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) - { R_MipMapNormalHeight( data, data, width, height, glRefConfig.swizzleNormalmap ); - } else - { R_MipMapsRGB( data, width, height ); - } } - width >>= 1; - height >>= 1; - if (width < 1) - width = 1; - if (height < 1) - height = 1; + width = MAX(1, width >> 1); + height = MAX(1, height >> 1); miplevel++; if ( data && r_colorMipLevels->integer ) @@ -2028,7 +2032,7 @@ static void Upload32(byte *data, int x, int y, int width, int height, GLenum pic } else if (!subtexture) { - if (picFormat != GL_RGBA8) + if (picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT) { RawImage_UploadTexture(data, 0, 0, width, height, picFormat, numMips, internalFormat, type, flags, qfalse); goto done; From a6a6162f0434347c1ee57ddf570e034fc769c14e Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 22 Dec 2015 05:04:07 -0800 Subject: [PATCH 084/480] OpenGL2: Add r_exportCubemaps for saving cubemaps on map load. --- code/renderergl2/tr_bsp.c | 37 ++++++++++++++++++++++++++- code/renderergl2/tr_image_dds.c | 45 +++++++++++++++++++++++++++++++++ code/renderergl2/tr_init.c | 3 +++ code/renderergl2/tr_local.h | 1 + 4 files changed, 85 insertions(+), 1 deletion(-) diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index fad9d2f8..553c4140 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -3067,16 +3067,23 @@ void R_AssignCubemapsToWorldSurfaces(void) } } +// FIXME: put this function declaration elsewhere +void R_SaveDDS(const char *filename, byte *pic, int width, int height, int depth); void R_RenderAllCubemaps(void) { + byte *data = NULL; + int sideSize = CUBE_MAP_SIZE * CUBE_MAP_SIZE * 4; int i, j; for (i = 0; i < tr.numCubemaps; i++) { tr.cubemaps[i].image = R_CreateImage(va("*cubeMap%d", i), NULL, CUBE_MAP_SIZE, CUBE_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, GL_RGBA8); } - + + if (r_exportCubemaps->integer) + data = ri.Malloc(sideSize * 6); + for (i = 0; i < tr.numCubemaps; i++) { for (j = 0; j < 6; j++) @@ -3086,6 +3093,34 @@ void R_RenderAllCubemaps(void) R_IssuePendingRenderCommands(); R_InitNextFrame(); } + + if (r_exportCubemaps->integer) + { + char filename[MAX_QPATH]; + byte *p; + cubemap_t *cubemap = &tr.cubemaps[i]; + + // FIXME: do this in backEnd + FBO_Bind(tr.renderCubeFbo); + + p = data; + for (j = 0; j < 6; j++) + { + qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + j, cubemap->image->texnum, 0); + qglReadPixels(0, 0, CUBE_MAP_SIZE, CUBE_MAP_SIZE, GL_RGBA, GL_UNSIGNED_BYTE, p); + p += sideSize; + } + FBO_Bind(NULL); + + Com_sprintf(filename, MAX_QPATH, "cubemaps/%s/%03d.dds", tr.world->baseName, backEnd.viewParms.targetFboCubemapIndex); + R_SaveDDS(filename, data, CUBE_MAP_SIZE, CUBE_MAP_SIZE, 6); + } + } + + if (r_exportCubemaps->integer) + { + ri.Cvar_Set("r_exportCubemaps", "0"); + ri.Free(data); } } diff --git a/code/renderergl2/tr_image_dds.c b/code/renderergl2/tr_image_dds.c index 8ad406fd..b509014d 100644 --- a/code/renderergl2/tr_image_dds.c +++ b/code/renderergl2/tr_image_dds.c @@ -451,3 +451,48 @@ void R_LoadDDS ( const char *filename, byte **pic, int *width, int *height, GLen ri.FS_FreeFile(buffer.v); } + +void R_SaveDDS(const char *filename, byte *pic, int width, int height, int depth) +{ + byte *data; + ddsHeader_t *ddsHeader; + int picSize, size; + + if (!depth) + depth = 1; + + picSize = width * height * depth * 4; + size = 4 + sizeof(*ddsHeader) + picSize; + data = ri.Malloc(size); + + data[0] = 'D'; + data[1] = 'D'; + data[2] = 'S'; + data[3] = ' '; + + ddsHeader = (ddsHeader_t *)(data + 4); + memset(ddsHeader, 0, sizeof(ddsHeader_t)); + + ddsHeader->headerSize = 0x7c; + ddsHeader->flags = _DDSFLAGS_REQUIRED; + ddsHeader->height = height; + ddsHeader->width = width; + ddsHeader->always_0x00000020 = 0x00000020; + ddsHeader->caps = DDSCAPS_COMPLEX | DDSCAPS_REQUIRED; + + if (depth == 6) + ddsHeader->caps2 = DDSCAPS2_CUBEMAP; + + ddsHeader->pixelFormatFlags = DDSPF_RGB | DDSPF_ALPHAPIXELS; + ddsHeader->rgbBitCount = 32; + ddsHeader->rBitMask = 0x000000ff; + ddsHeader->gBitMask = 0x0000ff00; + ddsHeader->bBitMask = 0x00ff0000; + ddsHeader->aBitMask = 0xff000000; + + Com_Memcpy(data + 4 + sizeof(*ddsHeader), pic, picSize); + + ri.FS_WriteFile(filename, data, size); + + ri.Free(data); +} diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 265ae20b..41761b4e 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -142,6 +142,7 @@ cvar_t *r_specularMapping; cvar_t *r_deluxeMapping; cvar_t *r_parallaxMapping; cvar_t *r_cubeMapping; +cvar_t *r_exportCubemaps; cvar_t *r_specularIsMetallic; cvar_t *r_glossIsRoughness; cvar_t *r_baseNormalX; @@ -455,6 +456,7 @@ byte *RB_ReadPixels(int x, int y, int width, int height, size_t *offset, int *pa buffer = ri.Hunk_AllocateTempMemory(padwidth * height + *offset + packAlign - 1); bufstart = PADP((intptr_t) buffer + *offset, packAlign); + qglReadPixels(x, y, width, height, GL_RGB, GL_UNSIGNED_BYTE, bufstart); *offset = bufstart - buffer; @@ -1213,6 +1215,7 @@ void R_Register( void ) r_deluxeMapping = ri.Cvar_Get( "r_deluxeMapping", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_parallaxMapping = ri.Cvar_Get( "r_parallaxMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_cubeMapping = ri.Cvar_Get( "r_cubeMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); + r_exportCubemaps = ri.Cvar_Get("r_exportCubemaps", "0", 0); r_specularIsMetallic = ri.Cvar_Get( "r_specularIsMetallic", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_glossIsRoughness = ri.Cvar_Get("r_glossIsRoughness", "0", CVAR_ARCHIVE | CVAR_LATCH); r_baseNormalX = ri.Cvar_Get( "r_baseNormalX", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index f083fe9b..f211eda0 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1792,6 +1792,7 @@ extern cvar_t *r_specularMapping; extern cvar_t *r_deluxeMapping; extern cvar_t *r_parallaxMapping; extern cvar_t *r_cubeMapping; +extern cvar_t *r_exportCubemaps; extern cvar_t *r_specularIsMetallic; extern cvar_t *r_glossIsRoughness; extern cvar_t *r_baseNormalX; From c3216f54d2fcc9539ddde9c17add6aaf37def496 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 23 Dec 2015 09:58:11 -0800 Subject: [PATCH 085/480] OpenGL2: Replace r_exportCubemaps cvar with exportCubemaps command. --- code/renderergl2/tr_backend.c | 62 +++++++++++++++++++++++++++++++++++ code/renderergl2/tr_bsp.c | 35 -------------------- code/renderergl2/tr_init.c | 33 +++++++++++++++++-- code/renderergl2/tr_local.h | 8 +++-- 4 files changed, 99 insertions(+), 39 deletions(-) diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index caddba36..34595280 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -1737,6 +1737,65 @@ const void *RB_PostProcess(const void *data) return (const void *)(cmd + 1); } +// FIXME: put this function declaration elsewhere +void R_SaveDDS(const char *filename, byte *pic, int width, int height, int depth); + +/* +============= +RB_ExportCubemaps + +============= +*/ +const void *RB_ExportCubemaps(const void *data) +{ + const exportCubemapsCommand_t *cmd = data; + + // finish any 2D drawing if needed + if (tess.numIndexes) + RB_EndSurface(); + + if (!glRefConfig.framebufferObject || !tr.world || tr.numCubemaps == 0) + { + // do nothing + ri.Printf(PRINT_ALL, "Nothing to export!\n"); + return (const void *)(cmd + 1); + } + + if (cmd) + { + FBO_t *oldFbo = glState.currentFBO; + int sideSize = CUBE_MAP_SIZE * CUBE_MAP_SIZE * 4; + byte *cubemapPixels = ri.Malloc(sideSize * 6); + int i, j; + + FBO_Bind(tr.renderCubeFbo); + + for (i = 0; i < tr.numCubemaps; i++) + { + char filename[MAX_QPATH]; + cubemap_t *cubemap = &tr.cubemaps[i]; + char *p = cubemapPixels; + + for (j = 0; j < 6; j++) + { + qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + j, cubemap->image->texnum, 0); + qglReadPixels(0, 0, CUBE_MAP_SIZE, CUBE_MAP_SIZE, GL_RGBA, GL_UNSIGNED_BYTE, p); + p += sideSize; + } + + Com_sprintf(filename, MAX_QPATH, "cubemaps/%s/%03d.dds", tr.world->baseName, i); + R_SaveDDS(filename, cubemapPixels, CUBE_MAP_SIZE, CUBE_MAP_SIZE, 6); + ri.Printf(PRINT_ALL, "Saved cubemap %d as %s\n", i, filename); + } + + FBO_Bind(oldFbo); + + ri.Free(cubemapPixels); + } + + return (const void *)(cmd + 1); +} + /* ==================== @@ -1785,6 +1844,9 @@ void RB_ExecuteRenderCommands( const void *data ) { case RC_POSTPROCESS: data = RB_PostProcess(data); break; + case RC_EXPORT_CUBEMAPS: + data = RB_ExportCubemaps(data); + break; case RC_END_OF_LIST: default: // finish any 2D drawing if needed diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index 553c4140..0df0f1cc 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -3067,13 +3067,9 @@ void R_AssignCubemapsToWorldSurfaces(void) } } -// FIXME: put this function declaration elsewhere -void R_SaveDDS(const char *filename, byte *pic, int width, int height, int depth); void R_RenderAllCubemaps(void) { - byte *data = NULL; - int sideSize = CUBE_MAP_SIZE * CUBE_MAP_SIZE * 4; int i, j; for (i = 0; i < tr.numCubemaps; i++) @@ -3081,9 +3077,6 @@ void R_RenderAllCubemaps(void) tr.cubemaps[i].image = R_CreateImage(va("*cubeMap%d", i), NULL, CUBE_MAP_SIZE, CUBE_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, GL_RGBA8); } - if (r_exportCubemaps->integer) - data = ri.Malloc(sideSize * 6); - for (i = 0; i < tr.numCubemaps; i++) { for (j = 0; j < 6; j++) @@ -3093,34 +3086,6 @@ void R_RenderAllCubemaps(void) R_IssuePendingRenderCommands(); R_InitNextFrame(); } - - if (r_exportCubemaps->integer) - { - char filename[MAX_QPATH]; - byte *p; - cubemap_t *cubemap = &tr.cubemaps[i]; - - // FIXME: do this in backEnd - FBO_Bind(tr.renderCubeFbo); - - p = data; - for (j = 0; j < 6; j++) - { - qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + j, cubemap->image->texnum, 0); - qglReadPixels(0, 0, CUBE_MAP_SIZE, CUBE_MAP_SIZE, GL_RGBA, GL_UNSIGNED_BYTE, p); - p += sideSize; - } - FBO_Bind(NULL); - - Com_sprintf(filename, MAX_QPATH, "cubemaps/%s/%03d.dds", tr.world->baseName, backEnd.viewParms.targetFboCubemapIndex); - R_SaveDDS(filename, data, CUBE_MAP_SIZE, CUBE_MAP_SIZE, 6); - } - } - - if (r_exportCubemaps->integer) - { - ri.Cvar_Set("r_exportCubemaps", "0"); - ri.Free(data); } } diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 41761b4e..47c8f11f 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -142,7 +142,6 @@ cvar_t *r_specularMapping; cvar_t *r_deluxeMapping; cvar_t *r_parallaxMapping; cvar_t *r_cubeMapping; -cvar_t *r_exportCubemaps; cvar_t *r_specularIsMetallic; cvar_t *r_glossIsRoughness; cvar_t *r_baseNormalX; @@ -832,6 +831,35 @@ void R_ScreenShotJPEG_f (void) { //============================================================================ +/* +================== +R_ExportCubemaps +================== +*/ +void R_ExportCubemaps() +{ + exportCubemapsCommand_t *cmd; + + cmd = R_GetCommandBuffer(sizeof(*cmd)); + if (!cmd) { + return; + } + cmd->commandId = RC_EXPORT_CUBEMAPS; +} + + +/* +================== +R_ExportCubemaps_f +================== +*/ +void R_ExportCubemaps_f(void) +{ + R_ExportCubemaps(); +} + +//============================================================================ + /* ================== RB_TakeVideoFrameCmd @@ -1215,7 +1243,6 @@ void R_Register( void ) r_deluxeMapping = ri.Cvar_Get( "r_deluxeMapping", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_parallaxMapping = ri.Cvar_Get( "r_parallaxMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_cubeMapping = ri.Cvar_Get( "r_cubeMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); - r_exportCubemaps = ri.Cvar_Get("r_exportCubemaps", "0", 0); r_specularIsMetallic = ri.Cvar_Get( "r_specularIsMetallic", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_glossIsRoughness = ri.Cvar_Get("r_glossIsRoughness", "0", CVAR_ARCHIVE | CVAR_LATCH); r_baseNormalX = ri.Cvar_Get( "r_baseNormalX", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); @@ -1355,6 +1382,7 @@ void R_Register( void ) ri.Cmd_AddCommand( "gfxinfo", GfxInfo_f ); ri.Cmd_AddCommand( "minimize", GLimp_Minimize ); ri.Cmd_AddCommand( "gfxmeminfo", GfxMemInfo_f ); + ri.Cmd_AddCommand( "exportCubemaps", R_ExportCubemaps_f ); } void R_InitQueries(void) @@ -1500,6 +1528,7 @@ void RE_Shutdown( qboolean destroyWindow ) { ri.Cmd_RemoveCommand( "modelist" ); ri.Cmd_RemoveCommand( "shaderstate" ); ri.Cmd_RemoveCommand( "gfxmeminfo" ); + ri.Cmd_RemoveCommand( "exportCubemaps" ); if ( tr.registered ) { diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index f211eda0..1896150f 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1792,7 +1792,6 @@ extern cvar_t *r_specularMapping; extern cvar_t *r_deluxeMapping; extern cvar_t *r_parallaxMapping; extern cvar_t *r_cubeMapping; -extern cvar_t *r_exportCubemaps; extern cvar_t *r_specularIsMetallic; extern cvar_t *r_glossIsRoughness; extern cvar_t *r_baseNormalX; @@ -2420,6 +2419,10 @@ typedef struct { viewParms_t viewParms; } postProcessCommand_t; +typedef struct { + int commandId; +} exportCubemapsCommand_t; + typedef enum { RC_END_OF_LIST, RC_SET_COLOR, @@ -2432,7 +2435,8 @@ typedef enum { RC_COLORMASK, RC_CLEARDEPTH, RC_CAPSHADOWMAP, - RC_POSTPROCESS + RC_POSTPROCESS, + RC_EXPORT_CUBEMAPS } renderCommand_t; From e2b243796676383827181a2c29f8478696760089 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 24 Dec 2015 16:34:58 -0800 Subject: [PATCH 086/480] OpenGL2: Add r_cubemapSize. --- code/renderergl2/tr_backend.c | 6 +++--- code/renderergl2/tr_bsp.c | 2 +- code/renderergl2/tr_image.c | 2 +- code/renderergl2/tr_init.c | 2 ++ code/renderergl2/tr_local.h | 3 +-- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index 34595280..9b54d546 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -1764,7 +1764,7 @@ const void *RB_ExportCubemaps(const void *data) if (cmd) { FBO_t *oldFbo = glState.currentFBO; - int sideSize = CUBE_MAP_SIZE * CUBE_MAP_SIZE * 4; + int sideSize = r_cubemapSize->integer * r_cubemapSize->integer * 4; byte *cubemapPixels = ri.Malloc(sideSize * 6); int i, j; @@ -1779,12 +1779,12 @@ const void *RB_ExportCubemaps(const void *data) for (j = 0; j < 6; j++) { qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + j, cubemap->image->texnum, 0); - qglReadPixels(0, 0, CUBE_MAP_SIZE, CUBE_MAP_SIZE, GL_RGBA, GL_UNSIGNED_BYTE, p); + qglReadPixels(0, 0, r_cubemapSize->integer, r_cubemapSize->integer, GL_RGBA, GL_UNSIGNED_BYTE, p); p += sideSize; } Com_sprintf(filename, MAX_QPATH, "cubemaps/%s/%03d.dds", tr.world->baseName, i); - R_SaveDDS(filename, cubemapPixels, CUBE_MAP_SIZE, CUBE_MAP_SIZE, 6); + R_SaveDDS(filename, cubemapPixels, r_cubemapSize->integer, r_cubemapSize->integer, 6); ri.Printf(PRINT_ALL, "Saved cubemap %d as %s\n", i, filename); } diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index 0df0f1cc..d73242b8 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -3074,7 +3074,7 @@ void R_RenderAllCubemaps(void) for (i = 0; i < tr.numCubemaps; i++) { - tr.cubemaps[i].image = R_CreateImage(va("*cubeMap%d", i), NULL, CUBE_MAP_SIZE, CUBE_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, GL_RGBA8); + tr.cubemaps[i].image = R_CreateImage(va("*cubeMap%d", i), NULL, r_cubemapSize->integer, r_cubemapSize->integer, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, GL_RGBA8); } for (i = 0; i < tr.numCubemaps; i++) diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index 9bdfece9..c2f9bb15 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -2841,7 +2841,7 @@ void R_CreateBuiltinImages( void ) { if (r_cubeMapping->integer) { - tr.renderCubeImage = R_CreateImage("*renderCube", NULL, CUBE_MAP_SIZE, CUBE_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, rgbFormat); + tr.renderCubeImage = R_CreateImage("*renderCube", NULL, r_cubemapSize->integer, r_cubemapSize->integer, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, rgbFormat); } } } diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 47c8f11f..1aa4d4eb 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -142,6 +142,7 @@ cvar_t *r_specularMapping; cvar_t *r_deluxeMapping; cvar_t *r_parallaxMapping; cvar_t *r_cubeMapping; +cvar_t *r_cubemapSize; cvar_t *r_specularIsMetallic; cvar_t *r_glossIsRoughness; cvar_t *r_baseNormalX; @@ -1243,6 +1244,7 @@ void R_Register( void ) r_deluxeMapping = ri.Cvar_Get( "r_deluxeMapping", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_parallaxMapping = ri.Cvar_Get( "r_parallaxMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_cubeMapping = ri.Cvar_Get( "r_cubeMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); + r_cubemapSize = ri.Cvar_Get( "r_cubemapSize", "128", CVAR_ARCHIVE | CVAR_LATCH ); r_specularIsMetallic = ri.Cvar_Get( "r_specularIsMetallic", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_glossIsRoughness = ri.Cvar_Get("r_glossIsRoughness", "0", CVAR_ARCHIVE | CVAR_LATCH); r_baseNormalX = ri.Cvar_Get( "r_baseNormalX", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 1896150f..22e935aa 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -54,8 +54,6 @@ typedef unsigned int glIndex_t; #define MAX_CALC_PSHADOWS 64 #define MAX_DRAWN_PSHADOWS 16 // do not increase past 32, because bit flags are used on surfaces #define PSHADOW_MAP_SIZE 512 -#define CUBE_MAP_MIPS 7 -#define CUBE_MAP_SIZE (1 << CUBE_MAP_MIPS) #define USE_VERT_TANGENT_SPACE #define USE_OVERBRIGHT @@ -1792,6 +1790,7 @@ extern cvar_t *r_specularMapping; extern cvar_t *r_deluxeMapping; extern cvar_t *r_parallaxMapping; extern cvar_t *r_cubeMapping; +extern cvar_t *r_cubemapSize; extern cvar_t *r_specularIsMetallic; extern cvar_t *r_glossIsRoughness; extern cvar_t *r_baseNormalX; From 615b73288fb589650f446ebf4e7e9a40192bf7dc Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 10 Dec 2013 21:14:13 -0600 Subject: [PATCH 087/480] Use Opus for VoIP Server/client VoIP protocol is handled by adding new cvars cl_voipProtocol and sv_voipProtocol, sv_voip and cl_voip are used to auto set/clear them. All users need to touch are cl/sv_voip as 0 or 1 just like before. Old Speex VoIP packets in demos are skipped. New VoIP packets are skipped in demos if sv_voipProtocol doesn't match cl_voipProtocol. Notable difference between usage of speex and opus codecs, when using Speex client would be sent 80ms at a time. Using Opus, 60ms is sent at a time. This was changed because the Opus codec supports encoding up to 60ms at a time. (Simpler to send only one codec frame in a packet.) --- Makefile | 80 ++++------------------------ code/client/cl_cgame.c | 36 +++++-------- code/client/cl_input.c | 4 +- code/client/cl_main.c | 108 +++++++++++++++++--------------------- code/client/cl_parse.c | 107 ++++++++++++++++++------------------- code/client/client.h | 21 ++++---- code/client/snd_openal.c | 8 +-- code/qcommon/qcommon.h | 6 ++- code/server/server.h | 3 +- code/server/sv_client.c | 24 ++++++--- code/server/sv_init.c | 3 +- code/server/sv_main.c | 5 +- code/server/sv_snapshot.c | 2 +- 13 files changed, 167 insertions(+), 240 deletions(-) diff --git a/Makefile b/Makefile index 26ef512e..6515cb53 100644 --- a/Makefile +++ b/Makefile @@ -202,10 +202,6 @@ ifndef USE_INTERNAL_LIBS USE_INTERNAL_LIBS=1 endif -ifndef USE_INTERNAL_SPEEX -USE_INTERNAL_SPEEX=$(USE_INTERNAL_LIBS) -endif - ifndef USE_INTERNAL_OGG USE_INTERNAL_OGG=$(USE_INTERNAL_LIBS) endif @@ -258,7 +254,6 @@ NDIR=$(MOUNT_DIR)/null UIDIR=$(MOUNT_DIR)/ui Q3UIDIR=$(MOUNT_DIR)/q3_ui JPDIR=$(MOUNT_DIR)/jpeg-8c -SPEEXDIR=$(MOUNT_DIR)/libspeex OGGDIR=$(MOUNT_DIR)/libogg-1.3.1 VORBISDIR=$(MOUNT_DIR)/libvorbis-1.3.4 OPUSDIR=$(MOUNT_DIR)/opus-1.1 @@ -991,8 +986,18 @@ ifeq ($(USE_CURL),1) endif endif +ifeq ($(USE_VOIP),1) + CLIENT_CFLAGS += -DUSE_VOIP + SERVER_CFLAGS += -DUSE_VOIP + NEED_OPUS=1 +endif + ifeq ($(USE_CODEC_OPUS),1) CLIENT_CFLAGS += -DUSE_CODEC_OPUS + NEED_OPUS=1 +endif + +ifeq ($(NEED_OPUS),1) ifeq ($(USE_INTERNAL_OPUS),1) OPUS_CFLAGS = -DOPUS_BUILD -DHAVE_LRINTF -DFLOATING_POINT -DUSE_ALLOCA \ -I$(OPUSDIR)/include -I$(OPUSDIR)/celt -I$(OPUSDIR)/silk \ @@ -1038,19 +1043,6 @@ ifeq ($(USE_MUMBLE),1) CLIENT_CFLAGS += -DUSE_MUMBLE endif -ifeq ($(USE_VOIP),1) - CLIENT_CFLAGS += -DUSE_VOIP - SERVER_CFLAGS += -DUSE_VOIP - ifeq ($(USE_INTERNAL_SPEEX),1) - SPEEX_CFLAGS += -DFLOATING_POINT -DUSE_ALLOCA -I$(SPEEXDIR)/include - else - SPEEX_CFLAGS ?= $(shell pkg-config --silence-errors --cflags speex speexdsp || true) - SPEEX_LIBS ?= $(shell pkg-config --silence-errors --libs speex speexdsp || echo -lspeex -lspeexdsp) - endif - CLIENT_CFLAGS += $(SPEEX_CFLAGS) - CLIENT_LIBS += $(SPEEX_LIBS) -endif - ifeq ($(USE_INTERNAL_ZLIB),1) ZLIB_CFLAGS = -DNO_GZIP -I$(ZDIR) else @@ -1828,53 +1820,7 @@ ifeq ($(ARCH),x86_64) $(B)/client/ftola.o endif -ifeq ($(USE_VOIP),1) -ifeq ($(USE_INTERNAL_SPEEX),1) -Q3OBJ += \ - $(B)/client/bits.o \ - $(B)/client/buffer.o \ - $(B)/client/cb_search.o \ - $(B)/client/exc_10_16_table.o \ - $(B)/client/exc_10_32_table.o \ - $(B)/client/exc_20_32_table.o \ - $(B)/client/exc_5_256_table.o \ - $(B)/client/exc_5_64_table.o \ - $(B)/client/exc_8_128_table.o \ - $(B)/client/fftwrap.o \ - $(B)/client/filterbank.o \ - $(B)/client/filters.o \ - $(B)/client/gain_table.o \ - $(B)/client/gain_table_lbr.o \ - $(B)/client/hexc_10_32_table.o \ - $(B)/client/hexc_table.o \ - $(B)/client/high_lsp_tables.o \ - $(B)/client/jitter.o \ - $(B)/client/kiss_fft.o \ - $(B)/client/kiss_fftr.o \ - $(B)/client/lpc.o \ - $(B)/client/lsp.o \ - $(B)/client/lsp_tables_nb.o \ - $(B)/client/ltp.o \ - $(B)/client/mdf.o \ - $(B)/client/modes.o \ - $(B)/client/modes_wb.o \ - $(B)/client/nb_celp.o \ - $(B)/client/preprocess.o \ - $(B)/client/quant_lsp.o \ - $(B)/client/resample.o \ - $(B)/client/sb_celp.o \ - $(B)/client/smallft.o \ - $(B)/client/speex.o \ - $(B)/client/speex_callbacks.o \ - $(B)/client/speex_header.o \ - $(B)/client/stereo.o \ - $(B)/client/vbr.o \ - $(B)/client/vq.o \ - $(B)/client/window.o -endif -endif - -ifeq ($(USE_CODEC_OPUS),1) +ifeq ($(NEED_OPUS),1) ifeq ($(USE_INTERNAL_OPUS),1) Q3OBJ += \ $(B)/client/opus/analysis.o \ @@ -2581,9 +2527,6 @@ $(B)/client/%.o: $(CMDIR)/%.c $(B)/client/%.o: $(BLIBDIR)/%.c $(DO_BOT_CC) -$(B)/client/%.o: $(SPEEXDIR)/%.c - $(DO_CC) - $(B)/client/%.o: $(OGGDIR)/src/%.c $(DO_CC) @@ -2874,7 +2817,6 @@ ifdef MINGW USE_OPENAL_DLOPEN=$(USE_OPENAL_DLOPEN) \ USE_CURL_DLOPEN=$(USE_CURL_DLOPEN) \ USE_INTERNAL_OPUS=$(USE_INTERNAL_OPUS) \ - USE_INTERNAL_SPEEX=$(USE_INTERNAL_SPEEX) \ USE_INTERNAL_ZLIB=$(USE_INTERNAL_ZLIB) \ USE_INTERNAL_JPEG=$(USE_INTERNAL_JPEG) else diff --git a/code/client/cl_cgame.c b/code/client/cl_cgame.c index d1e84806..d69ae752 100644 --- a/code/client/cl_cgame.c +++ b/code/client/cl_cgame.c @@ -905,37 +905,27 @@ void CL_FirstSnapshot( void ) { #endif #ifdef USE_VOIP - if (!clc.speexInitialized) { + if (!clc.voipCodecInitialized) { int i; - speex_bits_init(&clc.speexEncoderBits); - speex_bits_reset(&clc.speexEncoderBits); + int error; - clc.speexEncoder = speex_encoder_init(&speex_nb_mode); + clc.opusEncoder = opus_encoder_create(48000, 1, OPUS_APPLICATION_VOIP, &error); - speex_encoder_ctl(clc.speexEncoder, SPEEX_GET_FRAME_SIZE, - &clc.speexFrameSize); - speex_encoder_ctl(clc.speexEncoder, SPEEX_GET_SAMPLING_RATE, - &clc.speexSampleRate); - - clc.speexPreprocessor = speex_preprocess_state_init(clc.speexFrameSize, - clc.speexSampleRate); - - i = 1; - speex_preprocess_ctl(clc.speexPreprocessor, - SPEEX_PREPROCESS_SET_DENOISE, &i); - - i = 1; - speex_preprocess_ctl(clc.speexPreprocessor, - SPEEX_PREPROCESS_SET_AGC, &i); + if ( error ) { + Com_DPrintf("VoIP: Error opus_encoder_create %d\n", error); + return; + } for (i = 0; i < MAX_CLIENTS; i++) { - speex_bits_init(&clc.speexDecoderBits[i]); - speex_bits_reset(&clc.speexDecoderBits[i]); - clc.speexDecoder[i] = speex_decoder_init(&speex_nb_mode); + clc.opusDecoder[i] = opus_decoder_create(48000, 1, &error); + if ( error ) { + Com_DPrintf("VoIP: Error opus_decoder_create(%d) %d\n", i, error); + return; + } clc.voipIgnore[i] = qfalse; clc.voipGain[i] = 1.0f; } - clc.speexInitialized = qtrue; + clc.voipCodecInitialized = qtrue; clc.voipMuteAll = qfalse; Cmd_AddCommand ("voip", CL_Voip_f); Cvar_Set("cl_voipSendTarget", "spatial"); diff --git a/code/client/cl_input.c b/code/client/cl_input.c index 6e19263c..6669a406 100644 --- a/code/client/cl_input.c +++ b/code/client/cl_input.c @@ -788,7 +788,7 @@ void CL_WritePacket( void ) { { if((clc.voipFlags & VOIP_SPATIAL) || Com_IsVoipTarget(clc.voipTargets, sizeof(clc.voipTargets), -1)) { - MSG_WriteByte (&buf, clc_voip); + MSG_WriteByte (&buf, clc_voipOpus); MSG_WriteByte (&buf, clc.voipOutgoingGeneration); MSG_WriteLong (&buf, clc.voipOutgoingSequence); MSG_WriteByte (&buf, clc.voipOutgoingDataFrames); @@ -809,7 +809,7 @@ void CL_WritePacket( void ) { MSG_Init (&fakemsg, fakedata, sizeof (fakedata)); MSG_Bitstream (&fakemsg); MSG_WriteLong (&fakemsg, clc.reliableAcknowledge); - MSG_WriteByte (&fakemsg, svc_voip); + MSG_WriteByte (&fakemsg, svc_voipOpus); MSG_WriteShort (&fakemsg, clc.clientNum); MSG_WriteByte (&fakemsg, clc.voipOutgoingGeneration); MSG_WriteLong (&fakemsg, clc.voipOutgoingSequence); diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 75ce886b..205fd63c 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -44,6 +44,7 @@ cvar_t *cl_voipSendTarget; cvar_t *cl_voipGainDuringCapture; cvar_t *cl_voipCaptureMult; cvar_t *cl_voipShowMeter; +cvar_t *cl_voipProtocol; cvar_t *cl_voip; #endif @@ -250,8 +251,8 @@ void CL_Voip_f( void ) if (clc.state != CA_ACTIVE) reason = "Not connected to a server"; - else if (!clc.speexInitialized) - reason = "Speex not initialized"; + else if (!clc.voipCodecInitialized) + reason = "Voip codec not initialized"; else if (!clc.voipEnabled) reason = "Server doesn't support VoIP"; else if (!clc.demoplaying && (Cvar_VariableValue( "g_gametype" ) == GT_SINGLE_PLAYER || Cvar_VariableValue("ui_singlePlayerActive"))) @@ -306,6 +307,8 @@ void CL_VoipNewGeneration(void) clc.voipOutgoingGeneration = 1; clc.voipPower = 0.0f; clc.voipOutgoingSequence = 0; + + opus_encoder_ctl(clc.opusEncoder, OPUS_RESET_STATE); } /* @@ -394,7 +397,7 @@ void CL_VoipParseTargets(void) =============== CL_CaptureVoip -Record more audio from the hardware if required and encode it into Speex +Record more audio from the hardware if required and encode it into Opus data for later transmission. =============== */ @@ -424,11 +427,12 @@ void CL_CaptureVoip(void) Com_Printf("Until then, VoIP is disabled.\n"); Cvar_Set("cl_voip", "0"); } + Cvar_Set("cl_voipProtocol", cl_voip->integer ? "opus" : ""); cl_voip->modified = qfalse; cl_rate->modified = qfalse; } - if (!clc.speexInitialized) + if (!clc.voipCodecInitialized) return; // just in case this gets called at a bad time. if (clc.voipOutgoingDataSize > 0) @@ -481,80 +485,67 @@ void CL_CaptureVoip(void) if ((cl_voipSend->integer) || (finalFrame)) { // user wants to capture audio? int samples = S_AvailableCaptureSamples(); - const int mult = (finalFrame) ? 1 : 4; // 4 == 80ms of audio. + const int packetSamples = (finalFrame) ? VOIP_MAX_FRAME_SAMPLES : VOIP_MAX_PACKET_SAMPLES; // enough data buffered in audio hardware to process yet? - if (samples >= (clc.speexFrameSize * mult)) { - // audio capture is always MONO16 (and that's what speex wants!). - // 2048 will cover 12 uncompressed frames in narrowband mode. - static int16_t sampbuffer[2048]; + if (samples >= packetSamples) { + // audio capture is always MONO16. + static int16_t sampbuffer[VOIP_MAX_PACKET_SAMPLES]; float voipPower = 0.0f; - int speexFrames = 0; - int wpos = 0; - int pos = 0; + int voipFrames; + int i, bytes; - if (samples > (clc.speexFrameSize * 4)) - samples = (clc.speexFrameSize * 4); + if (samples > VOIP_MAX_PACKET_SAMPLES) + samples = VOIP_MAX_PACKET_SAMPLES; // !!! FIXME: maybe separate recording from encoding, so voipPower // !!! FIXME: updates faster than 4Hz? - samples -= samples % clc.speexFrameSize; + samples -= samples % VOIP_MAX_FRAME_SAMPLES; + if (samples != 120 && samples != 240 && samples != 480 && samples != 960 && samples != 1920 && samples != 2880 ) { + Com_Printf("Voip: bad number of samples %d\n", samples); + return; + } + voipFrames = samples / VOIP_MAX_FRAME_SAMPLES; + S_Capture(samples, (byte *) sampbuffer); // grab from audio card. - // this will probably generate multiple speex packets each time. - while (samples > 0) { - int16_t *sampptr = &sampbuffer[pos]; - int i, bytes; + // check the "power" of this packet... + for (i = 0; i < samples; i++) { + const float flsamp = (float) sampbuffer[i]; + const float s = fabs(flsamp); + voipPower += s * s; + sampbuffer[i] = (int16_t) ((flsamp) * audioMult); + } - // preprocess samples to remove noise... - speex_preprocess_run(clc.speexPreprocessor, sampptr); - - // check the "power" of this packet... - for (i = 0; i < clc.speexFrameSize; i++) { - const float flsamp = (float) sampptr[i]; - const float s = fabs(flsamp); - voipPower += s * s; - sampptr[i] = (int16_t) ((flsamp) * audioMult); - } - - // encode raw audio samples into Speex data... - speex_bits_reset(&clc.speexEncoderBits); - speex_encode_int(clc.speexEncoder, sampptr, - &clc.speexEncoderBits); - bytes = speex_bits_write(&clc.speexEncoderBits, - (char *) &clc.voipOutgoingData[wpos+1], - sizeof (clc.voipOutgoingData) - (wpos+1)); - assert((bytes > 0) && (bytes < 256)); - clc.voipOutgoingData[wpos] = (byte) bytes; - wpos += bytes + 1; - - // look at the data for the next packet... - pos += clc.speexFrameSize; - samples -= clc.speexFrameSize; - speexFrames++; + // encode raw audio samples into Opus data... + bytes = opus_encode(clc.opusEncoder, sampbuffer, samples, + (unsigned char *) clc.voipOutgoingData, + sizeof (clc.voipOutgoingData)); + if ( bytes <= 0 ) { + Com_DPrintf("VoIP: Error encoding %d samples\n", samples); + bytes = 0; } clc.voipPower = (voipPower / (32768.0f * 32768.0f * - ((float) (clc.speexFrameSize * speexFrames)))) * - 100.0f; + ((float) samples))) * 100.0f; if ((useVad) && (clc.voipPower < cl_voipVADThreshold->value)) { CL_VoipNewGeneration(); // no "talk" for at least 1/4 second. } else { - clc.voipOutgoingDataSize = wpos; - clc.voipOutgoingDataFrames = speexFrames; + clc.voipOutgoingDataSize = bytes; + clc.voipOutgoingDataFrames = voipFrames; Com_DPrintf("VoIP: Send %d frames, %d bytes, %f power\n", - speexFrames, wpos, clc.voipPower); + voipFrames, bytes, clc.voipPower); #if 0 static FILE *encio = NULL; if (encio == NULL) encio = fopen("voip-outgoing-encoded.bin", "wb"); - if (encio != NULL) { fwrite(clc.voipOutgoingData, wpos, 1, encio); fflush(encio); } + if (encio != NULL) { fwrite(clc.voipOutgoingData, bytes, 1, encio); fflush(encio); } static FILE *decio = NULL; if (decio == NULL) decio = fopen("voip-outgoing-decoded.bin", "wb"); - if (decio != NULL) { fwrite(sampbuffer, speexFrames * clc.speexFrameSize * 2, 1, decio); fflush(decio); } + if (decio != NULL) { fwrite(sampbuffer, voipFrames * VOIP_MAX_FRAME_SAMPLES * 2, 1, decio); fflush(decio); } #endif } } @@ -1420,14 +1411,11 @@ void CL_Disconnect( qboolean showMainMenu ) { cl_voipUseVAD->integer = tmp; } - if (clc.speexInitialized) { + if (clc.voipCodecInitialized) { int i; - speex_bits_destroy(&clc.speexEncoderBits); - speex_encoder_destroy(clc.speexEncoder); - speex_preprocess_state_destroy(clc.speexPreprocessor); + opus_encoder_destroy(clc.opusEncoder); for (i = 0; i < MAX_CLIENTS; i++) { - speex_bits_destroy(&clc.speexDecoderBits[i]); - speex_decoder_destroy(clc.speexDecoder[i]); + opus_decoder_destroy(clc.opusDecoder[i]); } } Cmd_RemoveCommand ("voip"); @@ -3653,9 +3641,9 @@ void CL_Init( void ) { cl_voipVADThreshold = Cvar_Get ("cl_voipVADThreshold", "0.25", CVAR_ARCHIVE); cl_voipShowMeter = Cvar_Get ("cl_voipShowMeter", "1", CVAR_ARCHIVE); - // This is a protocol version number. - cl_voip = Cvar_Get ("cl_voip", "1", CVAR_USERINFO | CVAR_ARCHIVE); + cl_voip = Cvar_Get ("cl_voip", "1", CVAR_ARCHIVE); Cvar_CheckRange( cl_voip, 0, 1, qtrue ); + cl_voipProtocol = Cvar_Get ("cl_voipProtocol", cl_voip->integer ? "opus" : "", CVAR_USERINFO | CVAR_ROM); #endif diff --git a/code/client/cl_parse.c b/code/client/cl_parse.c index 5c9c1471..5f2fcc0c 100644 --- a/code/client/cl_parse.c +++ b/code/client/cl_parse.c @@ -34,7 +34,8 @@ char *svc_strings[256] = { "svc_download", "svc_snapshot", "svc_EOF", - "svc_voip", + "svc_voipSpeex", + "svc_voipOpus", }; void SHOWNET( msg_t *msg, char *s) { @@ -359,8 +360,8 @@ void CL_SystemInfoChanged( void ) { else #endif { - s = Info_ValueForKey( systemInfo, "sv_voip" ); - clc.voipEnabled = atoi(s); + s = Info_ValueForKey( systemInfo, "sv_voipProtocol" ); + clc.voipEnabled = !Q_stricmp(s, "opus"); } #endif @@ -680,13 +681,13 @@ static void CL_PlayVoip(int sender, int samplecnt, const byte *data, int flags) { if(flags & VOIP_DIRECT) { - S_RawSamples(sender + 1, samplecnt, clc.speexSampleRate, 2, 1, + S_RawSamples(sender + 1, samplecnt, 48000, 2, 1, data, clc.voipGain[sender], -1); } if(flags & VOIP_SPATIAL) { - S_RawSamples(sender + MAX_CLIENTS + 1, samplecnt, clc.speexSampleRate, 2, 1, + S_RawSamples(sender + MAX_CLIENTS + 1, samplecnt, 48000, 2, 1, data, 1.0f, sender); } } @@ -699,8 +700,8 @@ A VoIP message has been received from the server ===================== */ static -void CL_ParseVoip ( msg_t *msg ) { - static short decoded[4096]; // !!! FIXME: don't hardcode. +void CL_ParseVoip ( msg_t *msg, qboolean ignoreData ) { + static short decoded[VOIP_MAX_PACKET_SAMPLES*4]; // !!! FIXME: don't hard code const int sender = MSG_ReadShort(msg); const int generation = MSG_ReadByte(msg); @@ -708,7 +709,8 @@ void CL_ParseVoip ( msg_t *msg ) { const int frames = MSG_ReadByte(msg); const int packetsize = MSG_ReadShort(msg); const int flags = MSG_ReadBits(msg, VOIP_FLAGCNT); - char encoded[1024]; + unsigned char encoded[4000]; + int numSamples; int seqdiff; int written = 0; int i; @@ -738,14 +740,15 @@ void CL_ParseVoip ( msg_t *msg ) { return; // overlarge packet, bail. } - if (!clc.speexInitialized) { - MSG_ReadData(msg, encoded, packetsize); // skip payload. - return; // can't handle VoIP without libspeex! + MSG_ReadData(msg, encoded, packetsize); + + if (ignoreData) { + return; // just ignore legacy speex voip data + } else if (!clc.voipCodecInitialized) { + return; // can't handle VoIP without libopus! } else if (sender >= MAX_CLIENTS) { - MSG_ReadData(msg, encoded, packetsize); // skip payload. return; // bogus sender. } else if (CL_ShouldIgnoreVoipSender(sender)) { - MSG_ReadData(msg, encoded, packetsize); // skip payload. return; // Channel is muted, bail. } @@ -758,70 +761,59 @@ void CL_ParseVoip ( msg_t *msg ) { // This is a new "generation" ... a new recording started, reset the bits. if (generation != clc.voipIncomingGeneration[sender]) { Com_DPrintf("VoIP: new generation %d!\n", generation); - speex_bits_reset(&clc.speexDecoderBits[sender]); + opus_decoder_ctl(clc.opusDecoder[sender], OPUS_RESET_STATE); clc.voipIncomingGeneration[sender] = generation; seqdiff = 0; } else if (seqdiff < 0) { // we're ahead of the sequence?! // This shouldn't happen unless the packet is corrupted or something. Com_DPrintf("VoIP: misordered sequence! %d < %d!\n", sequence, clc.voipIncomingSequence[sender]); - // reset the bits just in case. - speex_bits_reset(&clc.speexDecoderBits[sender]); + // reset the decoder just in case. + opus_decoder_ctl(clc.opusDecoder[sender], OPUS_RESET_STATE); seqdiff = 0; - } else if (seqdiff * clc.speexFrameSize * 2 >= sizeof (decoded)) { // dropped more than we can handle? + } else if (seqdiff * VOIP_MAX_PACKET_SAMPLES*2 >= sizeof (decoded)) { // dropped more than we can handle? // just start over. Com_DPrintf("VoIP: Dropped way too many (%d) frames from client #%d\n", seqdiff, sender); - speex_bits_reset(&clc.speexDecoderBits[sender]); + opus_decoder_ctl(clc.opusDecoder[sender], OPUS_RESET_STATE); seqdiff = 0; } if (seqdiff != 0) { Com_DPrintf("VoIP: Dropped %d frames from client #%d\n", seqdiff, sender); - // tell speex that we're missing frames... + // tell opus that we're missing frames... for (i = 0; i < seqdiff; i++) { - assert((written + clc.speexFrameSize) * 2 < sizeof (decoded)); - speex_decode_int(clc.speexDecoder[sender], NULL, decoded + written); - written += clc.speexFrameSize; + assert((written + VOIP_MAX_PACKET_SAMPLES) * 2 < sizeof (decoded)); + numSamples = opus_decode(clc.opusDecoder[sender], NULL, VOIP_MAX_PACKET_SAMPLES * 2, decoded + written, sizeof (decoded) - written, 0); + if ( numSamples <= 0 ) { + Com_DPrintf("VoIP: Error decoding frame %d from client #%d\n", i, sender); + continue; + } + written += numSamples; } } - for (i = 0; i < frames; i++) { - const int len = MSG_ReadByte(msg); - if (len < 0) { - Com_DPrintf("VoIP: Short packet!\n"); - break; - } - MSG_ReadData(msg, encoded, len); + numSamples = opus_decode(clc.opusDecoder[sender], encoded, packetsize, decoded + written, sizeof (decoded) - written, 0); - // shouldn't happen, but just in case... - if ((written + clc.speexFrameSize) * 2 > sizeof (decoded)) { - Com_DPrintf("VoIP: playback %d bytes, %d samples, %d frames\n", - written * 2, written, i); - - CL_PlayVoip(sender, written, (const byte *) decoded, flags); - written = 0; - } - - speex_bits_read_from(&clc.speexDecoderBits[sender], encoded, len); - speex_decode_int(clc.speexDecoder[sender], - &clc.speexDecoderBits[sender], decoded + written); - - #if 0 - static FILE *encio = NULL; - if (encio == NULL) encio = fopen("voip-incoming-encoded.bin", "wb"); - if (encio != NULL) { fwrite(encoded, len, 1, encio); fflush(encio); } - static FILE *decio = NULL; - if (decio == NULL) decio = fopen("voip-incoming-decoded.bin", "wb"); - if (decio != NULL) { fwrite(decoded+written, clc.speexFrameSize*2, 1, decio); fflush(decio); } - #endif - - written += clc.speexFrameSize; + if ( numSamples <= 0 ) { + Com_DPrintf("VoIP: Error decoding voip data from client #%d\n", sender); + numSamples = 0; } + #if 0 + static FILE *encio = NULL; + if (encio == NULL) encio = fopen("voip-incoming-encoded.bin", "wb"); + if (encio != NULL) { fwrite(encoded, len, 1, encio); fflush(encio); } + static FILE *decio = NULL; + if (decio == NULL) decio = fopen("voip-incoming-decoded.bin", "wb"); + if (decio != NULL) { fwrite(decoded+written, clc.speexFrameSize*2, 1, decio); fflush(decio); } + #endif + + written += numSamples; + Com_DPrintf("VoIP: playback %d bytes, %d samples, %d frames\n", - written * 2, written, i); + written * 2, written, frames); if(written > 0) CL_PlayVoip(sender, written, (const byte *) decoded, flags); @@ -924,9 +916,14 @@ void CL_ParseServerMessage( msg_t *msg ) { case svc_download: CL_ParseDownload( msg ); break; - case svc_voip: + case svc_voipSpeex: #ifdef USE_VOIP - CL_ParseVoip( msg ); + CL_ParseVoip( msg, qtrue ); +#endif + break; + case svc_voipOpus: +#ifdef USE_VOIP + CL_ParseVoip( msg, !clc.voipEnabled ); #endif break; } diff --git a/code/client/client.h b/code/client/client.h index a9b3e51e..0fe3889c 100644 --- a/code/client/client.h +++ b/code/client/client.h @@ -35,8 +35,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #endif /* USE_CURL */ #ifdef USE_VOIP -#include "speex/speex.h" -#include "speex/speex_preprocess.h" +#include #endif // file full of random crap that gets used to create cl_guid @@ -238,14 +237,11 @@ typedef struct { #ifdef USE_VOIP qboolean voipEnabled; - qboolean speexInitialized; - int speexFrameSize; - int speexSampleRate; + qboolean voipCodecInitialized; // incoming data... // !!! FIXME: convert from parallel arrays to array of a struct. - SpeexBits speexDecoderBits[MAX_CLIENTS]; - void *speexDecoder[MAX_CLIENTS]; + OpusDecoder *opusDecoder[MAX_CLIENTS]; byte voipIncomingGeneration[MAX_CLIENTS]; int voipIncomingSequence[MAX_CLIENTS]; float voipGain[MAX_CLIENTS]; @@ -257,9 +253,7 @@ typedef struct { // then we are sending to clientnum i. uint8_t voipTargets[(MAX_CLIENTS + 7) / 8]; uint8_t voipFlags; - SpeexPreprocessState *speexPreprocessor; - SpeexBits speexEncoderBits; - void *speexEncoder; + OpusEncoder *opusEncoder; int voipOutgoingDataSize; int voipOutgoingDataFrames; int voipOutgoingSequence; @@ -447,6 +441,13 @@ extern cvar_t *cl_voipGainDuringCapture; extern cvar_t *cl_voipCaptureMult; extern cvar_t *cl_voipShowMeter; extern cvar_t *cl_voip; + +// 20ms at 48k +#define VOIP_MAX_FRAME_SAMPLES ( 20 * 48 ) + +// 3 frame is 60ms of audio, the max opus will encode at once +#define VOIP_MAX_PACKET_FRAMES 3 +#define VOIP_MAX_PACKET_SAMPLES ( VOIP_MAX_FRAME_SAMPLES * VOIP_MAX_PACKET_FRAMES ) #endif //================================================= diff --git a/code/client/snd_openal.c b/code/client/snd_openal.c index d6498a98..fa5a721a 100644 --- a/code/client/snd_openal.c +++ b/code/client/snd_openal.c @@ -2681,16 +2681,12 @@ qboolean S_AL_Init( soundInterface_t *si ) s_alAvailableInputDevices = Cvar_Get("s_alAvailableInputDevices", inputdevicenames, CVAR_ROM | CVAR_NORESTART); - // !!! FIXME: 8000Hz is what Speex narrowband mode needs, but we - // !!! FIXME: should probably open the capture device after - // !!! FIXME: initializing Speex so we can change to wideband - // !!! FIXME: if we like. Com_Printf("OpenAL default capture device is '%s'\n", defaultinputdevice ? defaultinputdevice : "none"); - alCaptureDevice = qalcCaptureOpenDevice(inputdevice, 8000, AL_FORMAT_MONO16, 4096); + alCaptureDevice = qalcCaptureOpenDevice(inputdevice, 48000, AL_FORMAT_MONO16, VOIP_MAX_PACKET_SAMPLES*4); if( !alCaptureDevice && inputdevice ) { Com_Printf( "Failed to open OpenAL Input device '%s', trying default.\n", inputdevice ); - alCaptureDevice = qalcCaptureOpenDevice(NULL, 8000, AL_FORMAT_MONO16, 4096); + alCaptureDevice = qalcCaptureOpenDevice(NULL, 48000, AL_FORMAT_MONO16, VOIP_MAX_PACKET_SAMPLES*4); } Com_Printf( "OpenAL capture device %s.\n", (alCaptureDevice == NULL) ? "failed to open" : "opened"); diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index 1df3214c..b47a41f4 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -300,7 +300,8 @@ enum svc_ops_e { svc_EOF, // new commands, supported only by ioquake3 protocol but not legacy - svc_voip, // not wrapped in USE_VOIP, so this value is reserved. + svc_voipSpeex, // not wrapped in USE_VOIP, so this value is reserved. + svc_voipOpus, // }; @@ -316,7 +317,8 @@ enum clc_ops_e { clc_EOF, // new commands, supported only by ioquake3 protocol but not legacy - clc_voip, // not wrapped in USE_VOIP, so this value is reserved. + clc_voipSpeex, // not wrapped in USE_VOIP, so this value is reserved. + clc_voipOpus, // }; /* diff --git a/code/server/server.h b/code/server/server.h index 407d6ab6..39d6f4d3 100644 --- a/code/server/server.h +++ b/code/server/server.h @@ -44,7 +44,7 @@ typedef struct voipServerPacket_s int len; int sender; int flags; - byte data[1024]; + byte data[4000]; } voipServerPacket_t; #endif @@ -299,6 +299,7 @@ extern int serverBansCount; #ifdef USE_VOIP extern cvar_t *sv_voip; +extern cvar_t *sv_voipProtocol; #endif diff --git a/code/server/sv_client.c b/code/server/sv_client.c index 4b1895e5..d45c49d7 100644 --- a/code/server/sv_client.c +++ b/code/server/sv_client.c @@ -1459,8 +1459,8 @@ void SV_UserinfoChanged( client_t *cl ) { else #endif { - val = Info_ValueForKey(cl->userinfo, "cl_voip"); - cl->hasVoip = atoi(val); + val = Info_ValueForKey(cl->userinfo, "cl_voipProtocol"); + cl->hasVoip = !Q_stricmp( val, "opus" ); } #endif @@ -1794,7 +1794,7 @@ static qboolean SV_ShouldIgnoreVoipSender(const client_t *cl) } static -void SV_UserVoip(client_t *cl, msg_t *msg) +void SV_UserVoip(client_t *cl, msg_t *msg, qboolean ignoreData) { int sender, generation, sequence, frames, packetsize; uint8_t recips[(MAX_CLIENTS + 7) / 8]; @@ -1829,12 +1829,12 @@ void SV_UserVoip(client_t *cl, msg_t *msg) MSG_ReadData(msg, encoded, packetsize); - if (SV_ShouldIgnoreVoipSender(cl)) + if (ignoreData || SV_ShouldIgnoreVoipSender(cl)) return; // Blacklisted, disabled, etc. // !!! FIXME: see if we read past end of msg... - // !!! FIXME: reject if not speex narrowband codec. + // !!! FIXME: reject if not opus data. // !!! FIXME: decide if this is bogus data? // decide who needs this VoIP packet sent to them... @@ -1983,10 +1983,18 @@ void SV_ExecuteClientMessage( client_t *cl, msg_t *msg ) { } } while ( 1 ); - // read optional voip data - if ( c == clc_voip ) { + // skip legacy speex voip data + if ( c == clc_voipSpeex ) { #ifdef USE_VOIP - SV_UserVoip( cl, msg ); + SV_UserVoip( cl, msg, qtrue ); + c = MSG_ReadByte( msg ); +#endif + } + + // read optional voip data + if ( c == clc_voipOpus ) { +#ifdef USE_VOIP + SV_UserVoip( cl, msg, qfalse ); c = MSG_ReadByte( msg ); #endif } diff --git a/code/server/sv_init.c b/code/server/sv_init.c index 7332180b..ae9086ed 100644 --- a/code/server/sv_init.c +++ b/code/server/sv_init.c @@ -656,8 +656,9 @@ void SV_Init (void) sv_serverid = Cvar_Get ("sv_serverid", "0", CVAR_SYSTEMINFO | CVAR_ROM ); sv_pure = Cvar_Get ("sv_pure", "1", CVAR_SYSTEMINFO ); #ifdef USE_VOIP - sv_voip = Cvar_Get("sv_voip", "1", CVAR_SYSTEMINFO | CVAR_LATCH); + sv_voip = Cvar_Get("sv_voip", "1", CVAR_LATCH); Cvar_CheckRange(sv_voip, 0, 1, qtrue); + sv_voipProtocol = Cvar_Get("sv_voipProtocol", sv_voip->integer ? "opus" : "", CVAR_SYSTEMINFO | CVAR_ROM ); #endif Cvar_Get ("sv_paks", "", CVAR_SYSTEMINFO | CVAR_ROM ); Cvar_Get ("sv_pakNames", "", CVAR_SYSTEMINFO | CVAR_ROM ); diff --git a/code/server/sv_main.c b/code/server/sv_main.c index 4169fd2e..993910fe 100644 --- a/code/server/sv_main.c +++ b/code/server/sv_main.c @@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #ifdef USE_VOIP cvar_t *sv_voip; +cvar_t *sv_voipProtocol; #endif serverStatic_t svs; // persistant server info @@ -665,8 +666,8 @@ void SVC_Info( netadr_t from ) { Info_SetValueForKey(infostring, "g_needpass", va("%d", Cvar_VariableIntegerValue("g_needpass"))); #ifdef USE_VOIP - if (sv_voip->integer) { - Info_SetValueForKey( infostring, "voip", va("%i", sv_voip->integer ) ); + if (sv_voipProtocol->string && *sv_voipProtocol->string) { + Info_SetValueForKey( infostring, "voip", sv_voipProtocol->string ); } #endif diff --git a/code/server/sv_snapshot.c b/code/server/sv_snapshot.c index 6e4f2907..2237abd3 100644 --- a/code/server/sv_snapshot.c +++ b/code/server/sv_snapshot.c @@ -547,7 +547,7 @@ static void SV_WriteVoipToClient(client_t *cl, msg_t *msg) if (totalbytes > (msg->maxsize - msg->cursize) / 2) break; - MSG_WriteByte(msg, svc_voip); + MSG_WriteByte(msg, svc_voipOpus); MSG_WriteShort(msg, packet->sender); MSG_WriteByte(msg, (byte) packet->generation); MSG_WriteLong(msg, packet->sequence); From 8d38e2307c2932b22d6c2c931479782c8a765eba Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Tue, 14 Jan 2014 21:04:50 -0600 Subject: [PATCH 088/480] Fix some opus_decode issues It was able to fail the assert before. I was using opus_decode wrong. --- code/client/cl_parse.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/client/cl_parse.c b/code/client/cl_parse.c index 5f2fcc0c..39682507 100644 --- a/code/client/cl_parse.c +++ b/code/client/cl_parse.c @@ -785,7 +785,7 @@ void CL_ParseVoip ( msg_t *msg, qboolean ignoreData ) { // tell opus that we're missing frames... for (i = 0; i < seqdiff; i++) { assert((written + VOIP_MAX_PACKET_SAMPLES) * 2 < sizeof (decoded)); - numSamples = opus_decode(clc.opusDecoder[sender], NULL, VOIP_MAX_PACKET_SAMPLES * 2, decoded + written, sizeof (decoded) - written, 0); + numSamples = opus_decode(clc.opusDecoder[sender], NULL, 0, decoded + written, VOIP_MAX_PACKET_SAMPLES, 0); if ( numSamples <= 0 ) { Com_DPrintf("VoIP: Error decoding frame %d from client #%d\n", i, sender); continue; @@ -794,7 +794,7 @@ void CL_ParseVoip ( msg_t *msg, qboolean ignoreData ) { } } - numSamples = opus_decode(clc.opusDecoder[sender], encoded, packetsize, decoded + written, sizeof (decoded) - written, 0); + numSamples = opus_decode(clc.opusDecoder[sender], encoded, packetsize, decoded + written, ARRAY_LEN(decoded) - written, 0); if ( numSamples <= 0 ) { Com_DPrintf("VoIP: Error decoding voip data from client #%d\n", sender); From 63e45fab9ab0db45ab1b4727b54472ab88f1863d Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 15 Jan 2016 02:46:30 -0800 Subject: [PATCH 089/480] OpenGL2: Remove specular ambient. --- code/renderergl2/glsl/lightall_fp.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index 17dc9fca..b8f3985f 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -363,7 +363,7 @@ void main() reflectance = CalcDiffuse(diffuse.rgb, EH, NH, roughness); gl_FragColor.rgb = lightColor * reflectance * (attenuation * NL); - gl_FragColor.rgb += ambientColor * (diffuse.rgb + specular.rgb); + gl_FragColor.rgb += ambientColor * diffuse.rgb; #if defined(USE_CUBEMAP) reflectance = EnvironmentBRDF(roughness, NE, specular.rgb); From 3089df0398b8d0be9d6234e1620468aa2b068897 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 15 Jan 2016 02:54:34 -0800 Subject: [PATCH 090/480] Add msvc12 project files. --- misc/msvc12/cgame.def | 3 + misc/msvc12/cgame.vcxproj | 604 +++++++++++++++++ misc/msvc12/game.def | 3 + misc/msvc12/game.vcxproj | 695 ++++++++++++++++++++ misc/msvc12/glsl_stringify.vbs | 18 + misc/msvc12/ioq3.sln | 83 +++ misc/msvc12/opengl1.vcxproj | 428 ++++++++++++ misc/msvc12/opengl1.vcxproj.filters | 260 ++++++++ misc/msvc12/opengl2.vcxproj | 588 +++++++++++++++++ misc/msvc12/opengl2.vcxproj.filters | 354 ++++++++++ misc/msvc12/q3_ui.def | 3 + misc/msvc12/q3_ui.vcxproj | 967 +++++++++++++++++++++++++++ misc/msvc12/quake3.vcxproj | 970 ++++++++++++++++++++++++++++ misc/msvc12/quake3.vcxproj.filters | 708 ++++++++++++++++++++ misc/msvc12/ui.def | 3 + misc/msvc12/ui.vcxproj | 451 +++++++++++++ 16 files changed, 6138 insertions(+) create mode 100644 misc/msvc12/cgame.def create mode 100644 misc/msvc12/cgame.vcxproj create mode 100644 misc/msvc12/game.def create mode 100644 misc/msvc12/game.vcxproj create mode 100644 misc/msvc12/glsl_stringify.vbs create mode 100644 misc/msvc12/ioq3.sln create mode 100644 misc/msvc12/opengl1.vcxproj create mode 100644 misc/msvc12/opengl1.vcxproj.filters create mode 100644 misc/msvc12/opengl2.vcxproj create mode 100644 misc/msvc12/opengl2.vcxproj.filters create mode 100644 misc/msvc12/q3_ui.def create mode 100644 misc/msvc12/q3_ui.vcxproj create mode 100644 misc/msvc12/quake3.vcxproj create mode 100644 misc/msvc12/quake3.vcxproj.filters create mode 100644 misc/msvc12/ui.def create mode 100644 misc/msvc12/ui.vcxproj diff --git a/misc/msvc12/cgame.def b/misc/msvc12/cgame.def new file mode 100644 index 00000000..48b77433 --- /dev/null +++ b/misc/msvc12/cgame.def @@ -0,0 +1,3 @@ +EXPORTS + vmMain + dllEntry \ No newline at end of file diff --git a/misc/msvc12/cgame.vcxproj b/misc/msvc12/cgame.vcxproj new file mode 100644 index 00000000..6aa1afce --- /dev/null +++ b/misc/msvc12/cgame.vcxproj @@ -0,0 +1,604 @@ + + + + + Debug TA + Win32 + + + Debug + Win32 + + + Release TA + Win32 + + + Release + Win32 + + + + {C878E295-CB82-4B40-8ECF-5CE5525466FA} + cgame + + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + ..\..\build\release_ta-msvc12-x86\missionpack\ + ..\..\build\release_ta-msvc12-x86\missionpack\cgame\ + false + cgamex86 + + + ..\..\build\debug-msvc12-x86\baseq3\ + ..\..\build\debug-msvc12-x86\baseq3\cgame\ + true + cgamex86 + + + ..\..\build\release-msvc12-x86\baseq3\ + ..\..\build\release-msvc12-x86\baseq3\cgame\ + false + cgamex86 + + + ..\..\build\debug_ta-msvc12-x86\missionpack\ + ..\..\build\debug_ta-msvc12-x86\missionpack\cgame\ + true + cgamex86 + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\$(IntDir)cgame.tlb + + + + MaxSpeed + OnlyExplicitInline + WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;MISSIONPACK;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)cgame.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)cgamex86.dll + true + .\cgame.def + $(IntDir)cgamex86.pdb + true + $(IntDir)cgamex86.map + Windows + 0x30000000 + false + + $(IntDir)cgamex86.lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/cgame.tlb + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + MultiThreadedDebug + + $(IntDir)cgame.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + EditAndContinue + CompileAsC + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)cgamex86.dll + true + .\cgame.def + true + $(IntDir)cgamex86.pdb + true + $(IntDir)cgamex86.map + Windows + 0x30000000 + false + + $(IntDir)cgamex86.lib + MachineX86 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/cgame.tlb + + + + MaxSpeed + OnlyExplicitInline + WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)cgame.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)cgamex86.dll + true + .\cgame.def + $(IntDir)cgamex86.pdb + true + $(IntDir)cgamex86.map + Windows + 0x30000000 + false + + $(IntDir)cgamex86.lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug_TA/cgame.tlb + + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + MultiThreadedDebug + + $(IntDir)cgame.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + EditAndContinue + CompileAsC + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)cgamex86.dll + true + .\cgame.def + true + $(IntDir)cgamex86.pdb + true + $(IntDir)cgamex86.map + Windows + 0x30000000 + false + + $(IntDir)cgamex86.lib + MachineX86 + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/msvc12/game.def b/misc/msvc12/game.def new file mode 100644 index 00000000..65631961 --- /dev/null +++ b/misc/msvc12/game.def @@ -0,0 +1,3 @@ +EXPORTS + dllEntry + vmMain \ No newline at end of file diff --git a/misc/msvc12/game.vcxproj b/misc/msvc12/game.vcxproj new file mode 100644 index 00000000..abd03969 --- /dev/null +++ b/misc/msvc12/game.vcxproj @@ -0,0 +1,695 @@ + + + + + Debug TA + Win32 + + + Debug + Win32 + + + Release TA + Win32 + + + Release + Win32 + + + + {F9EE10DA-2404-4154-B904-F93C936C040A} + + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + ..\..\build\release_ta-msvc12-x86\missionpack\ + ..\..\build\release_ta-msvc12-x86\missionpack\game\ + false + qagamex86 + + + ..\..\build\debug-msvc12-x86\baseq3\ + ..\..\build\debug-msvc12-x86\baseq3\game\ + true + qagamex86 + + + ..\..\build\release-msvc12-x86\baseq3\ + ..\..\build\release-msvc12-x86\baseq3\game\ + false + qagamex86 + + + ..\..\build\debug_ta-msvc12-x86\missionpack\ + ..\..\build\debug_ta-msvc12-x86\missionpack\game\ + true + qagamex86 + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug_TA/game.tlb + + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + MultiThreadedDebug + + $(IntDir)game.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + EditAndContinue + CompileAsC + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + winmm.lib;%(AdditionalDependencies) + $(OutDir)qagamex86.dll + true + .\game.def + true + $(IntDir)qagamex86.pdb + true + $(IntDir)qagamex86.map + Windows + 0x20000000 + false + + $(IntDir)qagamex86.lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/game.tlb + + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + MultiThreadedDebug + + $(IntDir)game.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + EditAndContinue + CompileAsC + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + winmm.lib;%(AdditionalDependencies) + $(OutDir)qagamex86.dll + true + .\game.def + true + $(IntDir)qagamex86.pdb + true + $(IntDir)qagamex86.map + Windows + 0x20000000 + false + + $(IntDir)qagamex86.lib + MachineX86 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/game.tlb + + + + MaxSpeed + OnlyExplicitInline + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)game.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + winmm.lib;%(AdditionalDependencies) + $(OutDir)qagamex86.dll + true + .\game.def + $(IntDir)qagamex86.pdb + true + $(IntDir)qagamex86.map + Windows + 0x20000000 + false + + $(IntDir)qagamex86.lib + MachineX86 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release_TA/game.tlb + + + + MaxSpeed + OnlyExplicitInline + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)game.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + winmm.lib;%(AdditionalDependencies) + $(IntDir)qagamex86.dll + true + .\game.def + $(IntDir)qagamex86.pdb + true + $(IntDir)qagamex86.map + Windows + 0x20000000 + false + + $(IntDir)qagamex86.lib + MachineX86 + + + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;MISSIONPACK;QAGAME;%(PreprocessorDefinitions) + true + Disabled + WIN32;_DEBUG;_WINDOWS;BUILDING_REF_GL;DEBUG;GLOBALRANK;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;MISSIONPACK;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;GLOBALRANK;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/msvc12/glsl_stringify.vbs b/misc/msvc12/glsl_stringify.vbs new file mode 100644 index 00000000..34e49553 --- /dev/null +++ b/misc/msvc12/glsl_stringify.vbs @@ -0,0 +1,18 @@ +Dim fso, infile, outfile, line +Set fso = CreateObject("Scripting.FileSystemObject") +Set infile = fso.OpenTextFile(WScript.Arguments(0)) +Set outfile = fso.CreateTextFile(WScript.Arguments(1), True) + +outfile.WriteLine("const char *fallbackShader_" & fso.GetBaseName(WScript.Arguments(0)) & " =") +While Not infile.AtEndOfStream + line = infile.ReadLine + line = Replace(line, "\", "\\") + line = Replace(line, Chr(9), "\t") + line = Replace(line, Chr(34), "\" & chr(34)) + line = Chr(34) & line & "\n" & Chr(34) + outfile.WriteLine(line) +Wend +outfile.WriteLine(";") + +infile.Close +outfile.Close \ No newline at end of file diff --git a/misc/msvc12/ioq3.sln b/misc/msvc12/ioq3.sln new file mode 100644 index 00000000..c158f022 --- /dev/null +++ b/misc/msvc12/ioq3.sln @@ -0,0 +1,83 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cgame", "cgame.vcxproj", "{C878E295-CB82-4B40-8ECF-5CE5525466FA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "game", "game.vcxproj", "{F9EE10DA-2404-4154-B904-F93C936C040A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "q3_ui", "q3_ui.vcxproj", "{D454C4C7-7765-4149-ABAD-05FDEB9D94F8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "quake3", "quake3.vcxproj", "{81CB51C4-B434-4E12-B69B-BAEE102F2852}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ui", "ui.vcxproj", "{A8EAC38E-C7DA-42F8-811D-77FD092B9D19}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opengl2", "opengl2.vcxproj", "{F7B397A4-8111-421B-A23B-B9A2CE509183}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "opengl1", "opengl1.vcxproj", "{CD289B03-887C-4602-BDCE-AB6785A7489E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug TA|Win32 = Debug TA|Win32 + Debug|Win32 = Debug|Win32 + Release TA|Win32 = Release TA|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C878E295-CB82-4B40-8ECF-5CE5525466FA}.Debug TA|Win32.ActiveCfg = Debug TA|Win32 + {C878E295-CB82-4B40-8ECF-5CE5525466FA}.Debug TA|Win32.Build.0 = Debug TA|Win32 + {C878E295-CB82-4B40-8ECF-5CE5525466FA}.Debug|Win32.ActiveCfg = Debug|Win32 + {C878E295-CB82-4B40-8ECF-5CE5525466FA}.Debug|Win32.Build.0 = Debug|Win32 + {C878E295-CB82-4B40-8ECF-5CE5525466FA}.Release TA|Win32.ActiveCfg = Release TA|Win32 + {C878E295-CB82-4B40-8ECF-5CE5525466FA}.Release TA|Win32.Build.0 = Release TA|Win32 + {C878E295-CB82-4B40-8ECF-5CE5525466FA}.Release|Win32.ActiveCfg = Release|Win32 + {C878E295-CB82-4B40-8ECF-5CE5525466FA}.Release|Win32.Build.0 = Release|Win32 + {F9EE10DA-2404-4154-B904-F93C936C040A}.Debug TA|Win32.ActiveCfg = Debug TA|Win32 + {F9EE10DA-2404-4154-B904-F93C936C040A}.Debug TA|Win32.Build.0 = Debug TA|Win32 + {F9EE10DA-2404-4154-B904-F93C936C040A}.Debug|Win32.ActiveCfg = Debug|Win32 + {F9EE10DA-2404-4154-B904-F93C936C040A}.Debug|Win32.Build.0 = Debug|Win32 + {F9EE10DA-2404-4154-B904-F93C936C040A}.Release TA|Win32.ActiveCfg = Release TA|Win32 + {F9EE10DA-2404-4154-B904-F93C936C040A}.Release TA|Win32.Build.0 = Release TA|Win32 + {F9EE10DA-2404-4154-B904-F93C936C040A}.Release|Win32.ActiveCfg = Release|Win32 + {F9EE10DA-2404-4154-B904-F93C936C040A}.Release|Win32.Build.0 = Release|Win32 + {D454C4C7-7765-4149-ABAD-05FDEB9D94F8}.Debug TA|Win32.ActiveCfg = Debug TA|Win32 + {D454C4C7-7765-4149-ABAD-05FDEB9D94F8}.Debug|Win32.ActiveCfg = Debug|Win32 + {D454C4C7-7765-4149-ABAD-05FDEB9D94F8}.Debug|Win32.Build.0 = Debug|Win32 + {D454C4C7-7765-4149-ABAD-05FDEB9D94F8}.Release TA|Win32.ActiveCfg = Release TA|Win32 + {D454C4C7-7765-4149-ABAD-05FDEB9D94F8}.Release|Win32.ActiveCfg = Release|Win32 + {D454C4C7-7765-4149-ABAD-05FDEB9D94F8}.Release|Win32.Build.0 = Release|Win32 + {81CB51C4-B434-4E12-B69B-BAEE102F2852}.Debug TA|Win32.ActiveCfg = Debug TA|Win32 + {81CB51C4-B434-4E12-B69B-BAEE102F2852}.Debug TA|Win32.Build.0 = Debug TA|Win32 + {81CB51C4-B434-4E12-B69B-BAEE102F2852}.Debug|Win32.ActiveCfg = Debug|Win32 + {81CB51C4-B434-4E12-B69B-BAEE102F2852}.Debug|Win32.Build.0 = Debug|Win32 + {81CB51C4-B434-4E12-B69B-BAEE102F2852}.Release TA|Win32.ActiveCfg = Release TA|Win32 + {81CB51C4-B434-4E12-B69B-BAEE102F2852}.Release TA|Win32.Build.0 = Release TA|Win32 + {81CB51C4-B434-4E12-B69B-BAEE102F2852}.Release|Win32.ActiveCfg = Release|Win32 + {81CB51C4-B434-4E12-B69B-BAEE102F2852}.Release|Win32.Build.0 = Release|Win32 + {A8EAC38E-C7DA-42F8-811D-77FD092B9D19}.Debug TA|Win32.ActiveCfg = Debug TA|Win32 + {A8EAC38E-C7DA-42F8-811D-77FD092B9D19}.Debug TA|Win32.Build.0 = Debug TA|Win32 + {A8EAC38E-C7DA-42F8-811D-77FD092B9D19}.Debug|Win32.ActiveCfg = Debug|Win32 + {A8EAC38E-C7DA-42F8-811D-77FD092B9D19}.Release TA|Win32.ActiveCfg = Release TA|Win32 + {A8EAC38E-C7DA-42F8-811D-77FD092B9D19}.Release TA|Win32.Build.0 = Release TA|Win32 + {A8EAC38E-C7DA-42F8-811D-77FD092B9D19}.Release|Win32.ActiveCfg = Release|Win32 + {F7B397A4-8111-421B-A23B-B9A2CE509183}.Debug TA|Win32.ActiveCfg = Debug TA|Win32 + {F7B397A4-8111-421B-A23B-B9A2CE509183}.Debug TA|Win32.Build.0 = Debug TA|Win32 + {F7B397A4-8111-421B-A23B-B9A2CE509183}.Debug|Win32.ActiveCfg = Debug|Win32 + {F7B397A4-8111-421B-A23B-B9A2CE509183}.Debug|Win32.Build.0 = Debug|Win32 + {F7B397A4-8111-421B-A23B-B9A2CE509183}.Release TA|Win32.ActiveCfg = Release TA|Win32 + {F7B397A4-8111-421B-A23B-B9A2CE509183}.Release TA|Win32.Build.0 = Release TA|Win32 + {F7B397A4-8111-421B-A23B-B9A2CE509183}.Release|Win32.ActiveCfg = Release|Win32 + {F7B397A4-8111-421B-A23B-B9A2CE509183}.Release|Win32.Build.0 = Release|Win32 + {CD289B03-887C-4602-BDCE-AB6785A7489E}.Debug TA|Win32.ActiveCfg = Debug TA|Win32 + {CD289B03-887C-4602-BDCE-AB6785A7489E}.Debug TA|Win32.Build.0 = Debug TA|Win32 + {CD289B03-887C-4602-BDCE-AB6785A7489E}.Debug|Win32.ActiveCfg = Debug|Win32 + {CD289B03-887C-4602-BDCE-AB6785A7489E}.Debug|Win32.Build.0 = Debug|Win32 + {CD289B03-887C-4602-BDCE-AB6785A7489E}.Release TA|Win32.ActiveCfg = Release TA|Win32 + {CD289B03-887C-4602-BDCE-AB6785A7489E}.Release TA|Win32.Build.0 = Release TA|Win32 + {CD289B03-887C-4602-BDCE-AB6785A7489E}.Release|Win32.ActiveCfg = Release|Win32 + {CD289B03-887C-4602-BDCE-AB6785A7489E}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/misc/msvc12/opengl1.vcxproj b/misc/msvc12/opengl1.vcxproj new file mode 100644 index 00000000..5427d376 --- /dev/null +++ b/misc/msvc12/opengl1.vcxproj @@ -0,0 +1,428 @@ + + + + + Debug TA + Win32 + + + Debug + Win32 + + + Release TA + Win32 + + + Release + Win32 + + + + {CD289B03-887C-4602-BDCE-AB6785A7489E} + + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + ..\..\build\release_ta-msvc12-x86\ + ..\..\build\release_ta-msvc12-x86\opengl1\ + false + renderer_opengl1_x86 + + + ..\..\build\debug-msvc12-x86\ + ..\..\build\debug-msvc12-x86\opengl1\ + true + renderer_opengl1_x86 + + + ..\..\build\release-msvc12-x86\ + ..\..\build\release-msvc12-x86\opengl1\ + false + renderer_opengl1_x86 + + + ..\..\build\debug_ta-msvc12-x86\ + ..\..\build\debug_ta-msvc12-x86\opengl1\ + true + renderer_opengl1_x86 + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)opengl1.tlb + + + + MaxSpeed + AnySuitable + ..\..\code\SDL2\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;HAVE_CONFIG_H;MISSIONPACK;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)opengl1.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + Fast + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;%(AdditionalDependencies) + $(OutDir)renderer_opengl1_x86.dll + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + false + $(IntDir)opengl1.pdb + true + $(IntDir)opengl1.map + Windows + 8388608 + false + + MachineX86 + + + Post build processing.. + rem bash -c "perl ./unix/cons -- release-TA" + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)opengl1.tlb + + + + Disabled + ..\..\code\SDL2\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;HAVE_CONFIG_H;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + $(IntDir)opengl1.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + $(IntDir) + Level3 + true + EditAndContinue + CompileAsC + Fast + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\winquake.res + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;%(AdditionalDependencies) + $(OutDir)renderer_opengl1_x86.dll + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + true + $(IntDir)opengl1.pdb + true + $(IntDir)opengl1.map + Windows + 8388608 + false + + MachineX86 + + + Post build processing.. + rem bash -c "perl ./unix/cons -- debug" + + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)opengl1.tlb + + + + MaxSpeed + AnySuitable + ..\..\code\SDL2\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;HAVE_CONFIG_H;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)opengl1.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + Fast + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;%(AdditionalDependencies) + $(OutDir)renderer_opengl1_x86.dll + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + false + $(IntDir)opengl1.pdb + true + $(IntDir)opengl1.map + Windows + 8388608 + false + + MachineX86 + + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)opengl1.tlb + + + + Disabled + ..\..\code\SDL2\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;HAVE_CONFIG_H;MISSIONPACK;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + $(IntDir)opengl1.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + $(IntDir) + Level3 + true + EditAndContinue + CompileAsC + Fast + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\winquake.res + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;%(AdditionalDependencies) + $(OutDir)renderer_opengl1_x86.dll + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + true + $(IntDir)opengl1.pdb + true + $(IntDir)opengl1.map + Windows + 8388608 + false + + MachineX86 + + + Post build processing.. + rem bash -c "perl ./unix/cons -- debug-TA" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/msvc12/opengl1.vcxproj.filters b/misc/msvc12/opengl1.vcxproj.filters new file mode 100644 index 00000000..82f5def4 --- /dev/null +++ b/misc/msvc12/opengl1.vcxproj.filters @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + zlib + + + zlib + + + zlib + + + zlib + + + zlib + + + zlib + + + + + + + + + + + + + + + + + + + + + + + + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + + + {390df156-440d-42db-b71a-087565e4a5f4} + + + {33273ef7-ef3c-4823-905c-a0c8676fc7cf} + + + \ No newline at end of file diff --git a/misc/msvc12/opengl2.vcxproj b/misc/msvc12/opengl2.vcxproj new file mode 100644 index 00000000..d66ea9b3 --- /dev/null +++ b/misc/msvc12/opengl2.vcxproj @@ -0,0 +1,588 @@ + + + + + Debug TA + Win32 + + + Debug + Win32 + + + Release TA + Win32 + + + Release + Win32 + + + + {F7B397A4-8111-421B-A23B-B9A2CE509183} + opengl2 + + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + DynamicLibrary + v120 + false + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + ..\..\build\release_ta-msvc12-x86\ + ..\..\build\release_ta-msvc12-x86\opengl2\ + false + renderer_opengl2_x86 + + + ..\..\build\debug-msvc12-x86\ + ..\..\build\debug-msvc12-x86\opengl2\ + true + renderer_opengl2_x86 + + + ..\..\build\release-msvc12-x86\ + ..\..\build\release-msvc12-x86\opengl2\ + false + renderer_opengl2_x86 + + + ..\..\build\debug_ta-msvc12-x86\ + ..\..\build\debug_ta-msvc12-x86\opengl2\ + true + renderer_opengl2_x86 + + + + Stringify GLSL files + mkdir ..\..\build\dynamic +mkdir ..\..\build\dynamic\renderergl2 +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\bokeh_fp.glsl ..\..\build\dynamic\renderergl2\bokeh_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\bokeh_vp.glsl ..\..\build\dynamic\renderergl2\bokeh_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\calclevels4x_fp.glsl ..\..\build\dynamic\renderergl2\calclevels4x_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\calclevels4x_vp.glsl ..\..\build\dynamic\renderergl2\calclevels4x_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\depthblur_fp.glsl ..\..\build\dynamic\renderergl2\depthblur_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\depthblur_vp.glsl ..\..\build\dynamic\renderergl2\depthblur_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\dlight_fp.glsl ..\..\build\dynamic\renderergl2\dlight_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\dlight_vp.glsl ..\..\build\dynamic\renderergl2\dlight_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\down4x_fp.glsl ..\..\build\dynamic\renderergl2\down4x_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\down4x_vp.glsl ..\..\build\dynamic\renderergl2\down4x_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\fogpass_fp.glsl ..\..\build\dynamic\renderergl2\fogpass_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\fogpass_vp.glsl ..\..\build\dynamic\renderergl2\fogpass_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\generic_fp.glsl ..\..\build\dynamic\renderergl2\generic_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\generic_vp.glsl ..\..\build\dynamic\renderergl2\generic_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\lightall_fp.glsl ..\..\build\dynamic\renderergl2\lightall_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\lightall_vp.glsl ..\..\build\dynamic\renderergl2\lightall_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\pshadow_fp.glsl ..\..\build\dynamic\renderergl2\pshadow_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\pshadow_vp.glsl ..\..\build\dynamic\renderergl2\pshadow_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowfill_fp.glsl ..\..\build\dynamic\renderergl2\shadowfill_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowfill_vp.glsl ..\..\build\dynamic\renderergl2\shadowfill_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowmask_fp.glsl ..\..\build\dynamic\renderergl2\shadowmask_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowmask_vp.glsl ..\..\build\dynamic\renderergl2\shadowmask_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\ssao_fp.glsl ..\..\build\dynamic\renderergl2\ssao_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\ssao_vp.glsl ..\..\build\dynamic\renderergl2\ssao_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\texturecolor_fp.glsl ..\..\build\dynamic\renderergl2\texturecolor_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\texturecolor_vp.glsl ..\..\build\dynamic\renderergl2\texturecolor_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\tonemap_fp.glsl ..\..\build\dynamic\renderergl2\tonemap_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\tonemap_vp.glsl ..\..\build\dynamic\renderergl2\tonemap_vp.c + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)opengl2.tlb + + + + MaxSpeed + AnySuitable + ..\..\code\SDL2\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;HAVE_CONFIG_H;MISSIONPACK;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)opengl2.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + Fast + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;%(AdditionalDependencies) + $(OutDir)renderer_opengl2_x86.dll + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + false + $(IntDir)opengl2.pdb + true + $(IntDir)opengl2.map + Windows + 8388608 + false + + MachineX86 + + + Post build processing.. + rem bash -c "perl ./unix/cons -- release-TA" + + + + + Stringify GLSL files + mkdir ..\..\build\dynamic +mkdir ..\..\build\dynamic\renderergl2 +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\bokeh_fp.glsl ..\..\build\dynamic\renderergl2\bokeh_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\bokeh_vp.glsl ..\..\build\dynamic\renderergl2\bokeh_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\calclevels4x_fp.glsl ..\..\build\dynamic\renderergl2\calclevels4x_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\calclevels4x_vp.glsl ..\..\build\dynamic\renderergl2\calclevels4x_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\depthblur_fp.glsl ..\..\build\dynamic\renderergl2\depthblur_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\depthblur_vp.glsl ..\..\build\dynamic\renderergl2\depthblur_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\dlight_fp.glsl ..\..\build\dynamic\renderergl2\dlight_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\dlight_vp.glsl ..\..\build\dynamic\renderergl2\dlight_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\down4x_fp.glsl ..\..\build\dynamic\renderergl2\down4x_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\down4x_vp.glsl ..\..\build\dynamic\renderergl2\down4x_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\fogpass_fp.glsl ..\..\build\dynamic\renderergl2\fogpass_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\fogpass_vp.glsl ..\..\build\dynamic\renderergl2\fogpass_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\generic_fp.glsl ..\..\build\dynamic\renderergl2\generic_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\generic_vp.glsl ..\..\build\dynamic\renderergl2\generic_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\lightall_fp.glsl ..\..\build\dynamic\renderergl2\lightall_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\lightall_vp.glsl ..\..\build\dynamic\renderergl2\lightall_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\pshadow_fp.glsl ..\..\build\dynamic\renderergl2\pshadow_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\pshadow_vp.glsl ..\..\build\dynamic\renderergl2\pshadow_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowfill_fp.glsl ..\..\build\dynamic\renderergl2\shadowfill_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowfill_vp.glsl ..\..\build\dynamic\renderergl2\shadowfill_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowmask_fp.glsl ..\..\build\dynamic\renderergl2\shadowmask_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowmask_vp.glsl ..\..\build\dynamic\renderergl2\shadowmask_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\ssao_fp.glsl ..\..\build\dynamic\renderergl2\ssao_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\ssao_vp.glsl ..\..\build\dynamic\renderergl2\ssao_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\texturecolor_fp.glsl ..\..\build\dynamic\renderergl2\texturecolor_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\texturecolor_vp.glsl ..\..\build\dynamic\renderergl2\texturecolor_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\tonemap_fp.glsl ..\..\build\dynamic\renderergl2\tonemap_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\tonemap_vp.glsl ..\..\build\dynamic\renderergl2\tonemap_vp.c + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)opengl2.tlb + + + + Disabled + ..\..\code\SDL2\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;HAVE_CONFIG_H;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + $(IntDir)opengl2.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + $(IntDir) + Level3 + true + EditAndContinue + CompileAsC + Fast + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\winquake.res + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;%(AdditionalDependencies) + $(OutDir)renderer_opengl2_x86.dll + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + true + $(IntDir)opengl2.pdb + true + $(IntDir)opengl2.map + Windows + 8388608 + false + + MachineX86 + + + Post build processing.. + rem bash -c "perl ./unix/cons -- debug" + + + + + Stringify GLSL files + mkdir ..\..\build\dynamic +mkdir ..\..\build\dynamic\renderergl2 +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\bokeh_fp.glsl ..\..\build\dynamic\renderergl2\bokeh_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\bokeh_vp.glsl ..\..\build\dynamic\renderergl2\bokeh_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\calclevels4x_fp.glsl ..\..\build\dynamic\renderergl2\calclevels4x_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\calclevels4x_vp.glsl ..\..\build\dynamic\renderergl2\calclevels4x_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\depthblur_fp.glsl ..\..\build\dynamic\renderergl2\depthblur_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\depthblur_vp.glsl ..\..\build\dynamic\renderergl2\depthblur_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\dlight_fp.glsl ..\..\build\dynamic\renderergl2\dlight_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\dlight_vp.glsl ..\..\build\dynamic\renderergl2\dlight_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\down4x_fp.glsl ..\..\build\dynamic\renderergl2\down4x_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\down4x_vp.glsl ..\..\build\dynamic\renderergl2\down4x_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\fogpass_fp.glsl ..\..\build\dynamic\renderergl2\fogpass_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\fogpass_vp.glsl ..\..\build\dynamic\renderergl2\fogpass_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\generic_fp.glsl ..\..\build\dynamic\renderergl2\generic_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\generic_vp.glsl ..\..\build\dynamic\renderergl2\generic_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\lightall_fp.glsl ..\..\build\dynamic\renderergl2\lightall_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\lightall_vp.glsl ..\..\build\dynamic\renderergl2\lightall_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\pshadow_fp.glsl ..\..\build\dynamic\renderergl2\pshadow_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\pshadow_vp.glsl ..\..\build\dynamic\renderergl2\pshadow_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowfill_fp.glsl ..\..\build\dynamic\renderergl2\shadowfill_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowfill_vp.glsl ..\..\build\dynamic\renderergl2\shadowfill_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowmask_fp.glsl ..\..\build\dynamic\renderergl2\shadowmask_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowmask_vp.glsl ..\..\build\dynamic\renderergl2\shadowmask_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\ssao_fp.glsl ..\..\build\dynamic\renderergl2\ssao_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\ssao_vp.glsl ..\..\build\dynamic\renderergl2\ssao_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\texturecolor_fp.glsl ..\..\build\dynamic\renderergl2\texturecolor_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\texturecolor_vp.glsl ..\..\build\dynamic\renderergl2\texturecolor_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\tonemap_fp.glsl ..\..\build\dynamic\renderergl2\tonemap_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\tonemap_vp.glsl ..\..\build\dynamic\renderergl2\tonemap_vp.c + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)opengl2.tlb + + + + MaxSpeed + AnySuitable + ..\..\code\SDL2\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;HAVE_CONFIG_H;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)opengl2.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + Fast + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;%(AdditionalDependencies) + $(OutDir)renderer_opengl2_x86.dll + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + false + $(IntDir)opengl2.pdb + true + $(IntDir)opengl2.map + Windows + 8388608 + false + + MachineX86 + + + + + Stringify GLSL files + mkdir ..\..\build\dynamic +mkdir ..\..\build\dynamic\renderergl2 +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\bokeh_fp.glsl ..\..\build\dynamic\renderergl2\bokeh_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\bokeh_vp.glsl ..\..\build\dynamic\renderergl2\bokeh_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\calclevels4x_fp.glsl ..\..\build\dynamic\renderergl2\calclevels4x_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\calclevels4x_vp.glsl ..\..\build\dynamic\renderergl2\calclevels4x_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\depthblur_fp.glsl ..\..\build\dynamic\renderergl2\depthblur_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\depthblur_vp.glsl ..\..\build\dynamic\renderergl2\depthblur_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\dlight_fp.glsl ..\..\build\dynamic\renderergl2\dlight_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\dlight_vp.glsl ..\..\build\dynamic\renderergl2\dlight_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\down4x_fp.glsl ..\..\build\dynamic\renderergl2\down4x_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\down4x_vp.glsl ..\..\build\dynamic\renderergl2\down4x_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\fogpass_fp.glsl ..\..\build\dynamic\renderergl2\fogpass_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\fogpass_vp.glsl ..\..\build\dynamic\renderergl2\fogpass_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\generic_fp.glsl ..\..\build\dynamic\renderergl2\generic_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\generic_vp.glsl ..\..\build\dynamic\renderergl2\generic_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\lightall_fp.glsl ..\..\build\dynamic\renderergl2\lightall_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\lightall_vp.glsl ..\..\build\dynamic\renderergl2\lightall_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\pshadow_fp.glsl ..\..\build\dynamic\renderergl2\pshadow_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\pshadow_vp.glsl ..\..\build\dynamic\renderergl2\pshadow_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowfill_fp.glsl ..\..\build\dynamic\renderergl2\shadowfill_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowfill_vp.glsl ..\..\build\dynamic\renderergl2\shadowfill_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowmask_fp.glsl ..\..\build\dynamic\renderergl2\shadowmask_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\shadowmask_vp.glsl ..\..\build\dynamic\renderergl2\shadowmask_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\ssao_fp.glsl ..\..\build\dynamic\renderergl2\ssao_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\ssao_vp.glsl ..\..\build\dynamic\renderergl2\ssao_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\texturecolor_fp.glsl ..\..\build\dynamic\renderergl2\texturecolor_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\texturecolor_vp.glsl ..\..\build\dynamic\renderergl2\texturecolor_vp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\tonemap_fp.glsl ..\..\build\dynamic\renderergl2\tonemap_fp.c +cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\tonemap_vp.glsl ..\..\build\dynamic\renderergl2\tonemap_vp.c + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)opengl2.tlb + + + + Disabled + ..\..\code\SDL2\include;..\..\code\libcurl;..\..\code\AL;..\..\code\libspeex\include;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;HAVE_CONFIG_H;MISSIONPACK;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + $(IntDir)opengl2.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + $(IntDir) + Level3 + true + EditAndContinue + CompileAsC + Fast + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\winquake.res + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;%(AdditionalDependencies) + $(OutDir)renderer_opengl2_x86.dll + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + true + $(IntDir)opengl2.pdb + true + $(IntDir)opengl2.map + Windows + 8388608 + false + + MachineX86 + + + Post build processing.. + rem bash -c "perl ./unix/cons -- debug-TA" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/msvc12/opengl2.vcxproj.filters b/misc/msvc12/opengl2.vcxproj.filters new file mode 100644 index 00000000..480b8547 --- /dev/null +++ b/misc/msvc12/opengl2.vcxproj.filters @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + dynamic + + + zlib + + + zlib + + + zlib + + + zlib + + + zlib + + + zlib + + + + + + + + + + + + + + + + + + + + + + + + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + jpeg + + + + + {8da41ebb-15ff-4640-8b12-c2ec23c68e77} + + + {e6c65cf2-d575-4c8e-bdbb-e19a5775e5a8} + + + {3f4484f0-65ac-4160-9569-ba63ede6dfee} + + + \ No newline at end of file diff --git a/misc/msvc12/q3_ui.def b/misc/msvc12/q3_ui.def new file mode 100644 index 00000000..48b77433 --- /dev/null +++ b/misc/msvc12/q3_ui.def @@ -0,0 +1,3 @@ +EXPORTS + vmMain + dllEntry \ No newline at end of file diff --git a/misc/msvc12/q3_ui.vcxproj b/misc/msvc12/q3_ui.vcxproj new file mode 100644 index 00000000..9a345618 --- /dev/null +++ b/misc/msvc12/q3_ui.vcxproj @@ -0,0 +1,967 @@ + + + + + Debug TA + Win32 + + + Debug + Win32 + + + Release TA + Win32 + + + Release + Win32 + + + + {D454C4C7-7765-4149-ABAD-05FDEB9D94F8} + + + + DynamicLibrary + v120 + false + MultiByte + + + DynamicLibrary + v120 + false + MultiByte + + + DynamicLibrary + v120 + false + MultiByte + + + DynamicLibrary + v120 + false + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + ..\..\build\q3_ui_debug_ta\ + ..\..\build\q3_ui_debug_ta\ + true + + + ..\..\build\q3_ui_release_ta\ + ..\..\build\q3_ui_release_ta\ + false + + + ..\..\build\q3_ui_release\ + ..\..\build\q3_ui_release\ + false + + + ..\..\build\q3_ui_debug\ + ..\..\build\q3_ui_debug\ + true + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug_TA/q3_ui.tlb + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;UI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;MISSIONPACK;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + $(IntDir)q3_ui.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + EditAndContinue + CompileAsC + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)uix86_old.dll + true + q3_ui.def + true + $(IntDir)ui.pdb + true + $(IntDir)uix86.map + 0x40000000 + false + + $(IntDir)uix86.lib + MachineX86 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release_TA/q3_ui.tlb + + + + MaxSpeed + OnlyExplicitInline + WIN32;NDEBUG;_WINDOWS;_USRDLL;Q3_UI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;MISSIONPACK;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)q3_ui.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)uix86_old.dll + true + q3_ui.def + $(IntDir)uix86_old.pdb + false + + $(IntDir)q3_ui.lib + MachineX86 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/q3_ui.tlb + + + + MaxSpeed + OnlyExplicitInline + WIN32;NDEBUG;_WINDOWS;_USRDLL;Q3_UI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)q3_ui.pch + + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + $(OutDir)uix86.dll + true + .\q3_ui.def + $(IntDir)uix86.pdb + false + + $(IntDir)uix86.lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\q3_ui___Win32_Debug/q3_ui.tlb + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;UI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + $(IntDir)q3_ui.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + EditAndContinue + CompileAsC + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)uix86.dll + true + q3_ui.def + true + $(IntDir)ui.pdb + true + $(IntDir)uix86.map + 0x40000000 + false + + $(IntDir)uix86.lib + MachineX86 + + + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + true + true + + + true + true + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;Q3_UI_EXPORTS;%(PreprocessorDefinitions) + + + + + true + true + + + true + true + + + true + true + + + + + + + + + + \ No newline at end of file diff --git a/misc/msvc12/quake3.vcxproj b/misc/msvc12/quake3.vcxproj new file mode 100644 index 00000000..cc5171c1 --- /dev/null +++ b/misc/msvc12/quake3.vcxproj @@ -0,0 +1,970 @@ + + + + + Debug TA + Win32 + + + Debug + Win32 + + + Release TA + Win32 + + + Release + Win32 + + + + {81CB51C4-B434-4E12-B69B-BAEE102F2852} + + + + Application + v120 + false + + + Application + v120 + Static + + + Application + v120 + false + + + Application + v120 + false + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + ..\..\build\release_ta-msvc12-x86\ + ..\..\build\release_ta-msvc12-x86\client\ + false + ioquake3.x86 + + + ..\..\build\debug-msvc12-x86\ + ..\..\build\debug-msvc12-x86\client\ + true + ioquake3.x86 + + + ..\..\build\release-msvc12-x86\ + ..\..\build\release-msvc12-x86\client\ + false + ioquake3.x86 + + + ..\..\build\debug_ta-msvc12-x86\ + ..\..\build\debug_ta-msvc12-x86\client\ + true + ioquake3.x86 + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)quake3.tlb + + + + MaxSpeed + AnySuitable + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\opus-1.1\include;..\..\code\opus-1.1\celt;..\..\code\opus-1.1\silk;..\..\code\opus-1.1\silk\float;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;OPUS_BUILD;HAVE_LRINTF;FLOATING_POINT;USE_ALLOCA;MISSIONPACK;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)quake3.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + Fast + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;gdi32.lib;%(AdditionalDependencies) + $(OutDir)ioquake3.x86.exe + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + false + $(IntDir)quake3.pdb + true + $(IntDir)quake3.map + Windows + 8388608 + false + + MachineX86 + + + + + Post build processing.. + rem bash -c "perl ./unix/cons -- release-TA" + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)quake3.tlb + + + + Disabled + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\opus-1.1\include;..\..\code\opus-1.1\celt;..\..\code\opus-1.1\silk;..\..\code\opus-1.1\silk\float;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;OPUS_BUILD;HAVE_LRINTF;FLOATING_POINT;USE_ALLOCA;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + $(IntDir)quake3.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + $(IntDir) + Level3 + true + EditAndContinue + CompileAsC + Fast + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\winquake.res + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;gdi32.lib;%(AdditionalDependencies) + $(OutDir)ioquake3.x86.exe + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + true + $(IntDir)quake3.pdb + true + $(IntDir)quake3.map + Windows + 8388608 + false + + MachineX86 + + + Post build processing.. + rem bash -c "perl ./unix/cons -- debug" + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)quake3.tlb + + + + MaxSpeed + AnySuitable + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\opus-1.1\include;..\..\code\opus-1.1\celt;..\..\code\opus-1.1\silk;..\..\code\opus-1.1\silk\float;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;OPUS_BUILD;HAVE_LRINTF;FLOATING_POINT;USE_ALLOCA;USE_INTERNAL_JPEG;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)quake3.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level4 + true + CompileAsC + Fast + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;gdi32.lib;%(AdditionalDependencies) + $(OutDir)ioquake3.x86.exe + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + false + $(IntDir)quake3.pdb + true + $(IntDir)quake3.map + Windows + 8388608 + false + + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(IntDir)quake3.tlb + + + + Disabled + ..\..\code\SDL2\include;..\..\code\libcurl-7.35.0;..\..\code\AL;..\..\code\opus-1.1\include;..\..\code\opus-1.1\celt;..\..\code\opus-1.1\silk;..\..\code\opus-1.1\silk\float;..\..\code\zlib;..\..\code\jpeg-8c;%(AdditionalIncludeDirectories) + _WIN32;WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE;BOTLIB;USE_ICON;USE_CURL;USE_CURL_DLOPEN;USE_OPENAL;USE_OPENAL_DLOPEN;USE_VOIP;OPUS_BUILD;HAVE_LRINTF;FLOATING_POINT;USE_ALLOCA;MISSIONPACK;USE_RENDERER_DLOPEN;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + + $(IntDir)quake3.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + $(IntDir) + Level3 + true + EditAndContinue + CompileAsC + Fast + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + ..\winquake.res + + + user32.lib;advapi32.lib;winmm.lib;wsock32.lib;ws2_32.lib;SDL2main.lib;SDL2.lib;OpenGL32.lib;msvcrt.lib;psapi.lib;gdi32.lib;%(AdditionalDependencies) + $(OutDir)ioquake3.x86.exe + true + ..\..\code\libs\win32;%(AdditionalLibraryDirectories) + true + $(IntDir)quake3.pdb + true + $(IntDir)quake3.map + Windows + 8388608 + false + + MachineX86 + + + Post build processing.. + rem bash -c "perl ./unix/cons -- debug-TA" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + + + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + Disabled + true + Disabled + true + MaxSpeed + true + MaxSpeed + + + + + + + + + + + + + + + Assembling... + ml /c /Zi /safeseh /Fo"$(OutDir)%(Filename).asm.obj" "%(FullPath)" + + $(OutDir)%(Filename).asm.obj;%(Outputs) + Assembling... + ml /c /Zi /safeseh /Fo"$(OutDir)%(Filename).asm.obj" "%(FullPath)" + + $(OutDir)%(Filename).asm.obj;%(Outputs) + Assembling... + ml /c /Zi /safeseh /Fo"$(OutDir)%(Filename).asm.obj" "%(FullPath)" + + $(OutDir)%(Filename).asm.obj;%(Outputs) + Assembling... + ml /c /Zi /safeseh /Fo"$(OutDir)%(Filename).asm.obj" "%(FullPath)" + + $(OutDir)%(Filename).asm.obj;%(Outputs) + + + Assembling... + ml /c /Zi /safeseh /Fo"$(OutDir)%(Filename).asm.obj" "%(FullPath)" + + $(OutDir)%(Filename).asm.obj;%(Outputs) + Assembling... + ml /c /Zi /safeseh /Fo"$(OutDir)%(Filename).asm.obj" "%(FullPath)" + + $(OutDir)%(Filename).asm.obj;%(Outputs) + Assembling... + ml /c /Zi /safeseh /Fo"$(OutDir)%(Filename).asm.obj" "%(FullPath)" + + $(OutDir)%(Filename).asm.obj;%(Outputs) + Assembling... + ml /c /Zi /safeseh /Fo"$(OutDir)%(Filename).asm.obj" "%(FullPath)" + + $(OutDir)%(Filename).asm.obj;%(Outputs) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/misc/msvc12/quake3.vcxproj.filters b/misc/msvc12/quake3.vcxproj.filters new file mode 100644 index 00000000..0cb1d4b5 --- /dev/null +++ b/misc/msvc12/quake3.vcxproj.filters @@ -0,0 +1,708 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + opus + + + opus + + + opus + + + opus + + + opus + + + opus + + + opus + + + opus + + + opus + + + opus + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\celt + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + opus\silk\float + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + zlib + + + zlib + + + zlib + + + zlib + + + zlib + + + zlib + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + botlib + + + + + + + + + + + + {d6204e4b-159e-401d-a96a-3d1b72f5df0a} + + + {c2fe2fed-c3c6-4bc8-9372-2db1a3d924f2} + + + {722d3052-e380-4561-9e7a-c28529679f03} + + + {315655da-209f-4733-bf40-e5ecc84dc00b} + + + {6961d5c6-f671-48f2-ae60-25b4274d2f55} + + + {896eb09e-4521-4061-8cba-7dbd49166a36} + + + \ No newline at end of file diff --git a/misc/msvc12/ui.def b/misc/msvc12/ui.def new file mode 100644 index 00000000..48b77433 --- /dev/null +++ b/misc/msvc12/ui.def @@ -0,0 +1,3 @@ +EXPORTS + vmMain + dllEntry \ No newline at end of file diff --git a/misc/msvc12/ui.vcxproj b/misc/msvc12/ui.vcxproj new file mode 100644 index 00000000..a5584ba4 --- /dev/null +++ b/misc/msvc12/ui.vcxproj @@ -0,0 +1,451 @@ + + + + + Debug TA + Win32 + + + Debug + Win32 + + + Release TA + Win32 + + + Release + Win32 + + + + {A8EAC38E-C7DA-42F8-811D-77FD092B9D19} + + + + DynamicLibrary + v120 + false + MultiByte + + + DynamicLibrary + v120 + false + MultiByte + + + DynamicLibrary + v120 + false + MultiByte + + + DynamicLibrary + v120 + false + MultiByte + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.30501.0 + + + ..\..\build\release_ta-msvc12-x86\missionpack\ + ..\..\build\release_ta-msvc12-x86\missionpack\ui\ + false + uix86 + + + ..\..\build\debug-msvc12-x86\baseq3\ + ..\..\build\debug-msvc12-x86\baseq3\ui\ + true + uix86 + + + ..\..\build\release-msvc12-x86\baseq3\ + ..\..\build\release-msvc12-x86\baseq3\ui\ + false + uix86 + + + ..\..\build\debug_ta-msvc12-x86\missionpack\ + ..\..\build\debug_ta-msvc12-x86\missionpack\ui\ + true + uix86 + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release_TA/ui.tlb + + + + MaxSpeed + OnlyExplicitInline + WIN32;NDEBUG;_WINDOWS;_USRDLL;UI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)ui.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)uix86.dll + true + .\ui.def + $(IntDir)uix86.pdb + true + $(IntDir)uix86.map + 0x40000000 + false + + $(IntDir)uix86.lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ui.tlb + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;UI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + $(IntDir)ui.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + EditAndContinue + CompileAsC + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)uix86_new.dll + true + true + $(IntDir)ui.pdb + true + $(IntDir)uix86_new.map + 0x40000000 + false + + $(IntDir)uix86_new.lib + MachineX86 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Release/ui.tlb + + + + MaxSpeed + OnlyExplicitInline + WIN32;NDEBUG;_WINDOWS;_USRDLL;UI_EXPORTS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + true + MultiThreaded + true + + $(IntDir)ui.pch + $(IntDir) + $(IntDir) + $(IntDir) + Level3 + true + CompileAsC + + + NDEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)uix86_new.dll + true + $(IntDir)uix86_new.pdb + true + $(IntDir)uix86_new.map + 0x40000000 + false + + $(IntDir)uix86_new.lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug_TA/ui.tlb + + + + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;UI_EXPORTS;MISSIONPACK;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) + EnableFastChecks + MultiThreadedDebug + + $(IntDir)ui.pch + $(IntDir) + $(IntDir) + $(IntDir) + true + Level3 + true + EditAndContinue + CompileAsC + + + _DEBUG;%(PreprocessorDefinitions) + 0x0409 + + + odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + $(OutDir)uix86.dll + true + .\ui.def + true + $(IntDir)ui.pdb + true + $(IntDir)uix86.map + 0x40000000 + false + + $(IntDir)uix86.lib + MachineX86 + + + + + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;MISSIONPACK;%(PreprocessorDefinitions) + EnableFastChecks + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;MISSIONPACK;%(PreprocessorDefinitions) + EnableFastChecks + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + + + true + true + + + true + true + + + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;MISSIONPACK;%(PreprocessorDefinitions) + EnableFastChecks + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;MISSIONPACK;%(PreprocessorDefinitions) + EnableFastChecks + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;MISSIONPACK;%(PreprocessorDefinitions) + EnableFastChecks + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;MISSIONPACK;%(PreprocessorDefinitions) + EnableFastChecks + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;MISSIONPACK;%(PreprocessorDefinitions) + EnableFastChecks + true + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + + + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;MISSIONPACK;%(PreprocessorDefinitions) + EnableFastChecks + true + Disabled + WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + EnableFastChecks + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + true + MaxSpeed + WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;UI_EXPORTS;%(PreprocessorDefinitions) + + + + + true + true + + + true + true + + + true + true + + + true + true + + + true + true + + + true + true + + + true + true + + + true + true + + + true + true + + + + + + + + + \ No newline at end of file From 275317fefb550401aca885c4c9bdac8714880939 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 18 Jan 2016 04:46:01 -0800 Subject: [PATCH 091/480] OpenGL2: Direct state access, part 1: Texture binds --- Makefile | 1 + code/renderercommon/qgl.h | 17 +++ code/renderergl2/tr_backend.c | 161 +++++++--------------------- code/renderergl2/tr_dsa.c | 132 +++++++++++++++++++++++ code/renderergl2/tr_dsa.h | 46 ++++++++ code/renderergl2/tr_extensions.c | 52 +++++++++ code/renderergl2/tr_image.c | 128 +++++++++------------- code/renderergl2/tr_init.c | 17 ++- code/renderergl2/tr_local.h | 7 +- code/renderergl2/tr_main.c | 2 +- code/renderergl2/tr_shade.c | 16 +-- code/renderergl2/tr_shadows.c | 4 +- code/renderergl2/tr_sky.c | 2 +- code/renderergl2/tr_surface.c | 4 +- misc/msvc12/opengl2.vcxproj | 1 + misc/msvc12/opengl2.vcxproj.filters | 1 + 16 files changed, 356 insertions(+), 235 deletions(-) create mode 100644 code/renderergl2/tr_dsa.c create mode 100644 code/renderergl2/tr_dsa.h diff --git a/Makefile b/Makefile index 6515cb53..d65d9bf6 100644 --- a/Makefile +++ b/Makefile @@ -1644,6 +1644,7 @@ Q3R2OBJ = \ $(B)/renderergl2/tr_bsp.o \ $(B)/renderergl2/tr_cmds.o \ $(B)/renderergl2/tr_curve.o \ + $(B)/renderergl2/tr_dsa.o \ $(B)/renderergl2/tr_extramath.o \ $(B)/renderergl2/tr_extensions.o \ $(B)/renderergl2/tr_fbo.o \ diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h index 7d94c25a..1b042e91 100644 --- a/code/renderercommon/qgl.h +++ b/code/renderercommon/qgl.h @@ -736,6 +736,23 @@ extern GLboolean (APIENTRY * qglIsVertexArrayARB)(GLuint array); #define GL_VERTEX_ARRAY_BINDING_ARB 0x85B5 #endif +// GL_EXT_direct_state_access +extern GLvoid(APIENTRY * qglBindMultiTexture)(GLenum texunit, GLenum target, GLuint texture); +extern GLvoid(APIENTRY * qglTextureParameterf)(GLuint texture, GLenum target, GLenum pname, GLfloat param); +extern GLvoid(APIENTRY * qglTextureParameteri)(GLuint texture, GLenum target, GLenum pname, GLint param); +extern GLvoid(APIENTRY * qglTextureImage2D)(GLuint texture, GLenum target, GLint level, GLint internalformat, + GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +extern GLvoid(APIENTRY * qglTextureSubImage2D)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +extern GLvoid(APIENTRY * qglCopyTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat, + GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +extern GLvoid(APIENTRY * qglCompressedTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat, + GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +extern GLvoid(APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, + GLsizei imageSize, const GLvoid *data); +extern GLvoid(APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target); + #if defined(WIN32) // WGL_ARB_create_context diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index 9b54d546..f3f5a6af 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -20,6 +20,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ #include "tr_local.h" +#include "tr_dsa.h" backEndData_t *backEndData; backEndState_t backEnd; @@ -35,81 +36,28 @@ static float s_flipMatrix[16] = { }; -/* -** GL_Bind -*/ -void GL_Bind( image_t *image ) { - int texnum; - - if ( !image ) { - ri.Printf( PRINT_WARNING, "GL_Bind: NULL image\n" ); - texnum = tr.defaultImage->texnum; - } else { - texnum = image->texnum; - } - - if ( r_nobind->integer && tr.dlightImage ) { // performance evaluation option - texnum = tr.dlightImage->texnum; - } - - if ( glState.currenttextures[glState.currenttmu] != texnum ) { - if ( image ) { - image->frameUsed = tr.frameCount; - } - glState.currenttextures[glState.currenttmu] = texnum; - if (image && image->flags & IMGFLAG_CUBEMAP) - qglBindTexture( GL_TEXTURE_CUBE_MAP, texnum ); - else - qglBindTexture( GL_TEXTURE_2D, texnum ); - } -} - -/* -** GL_SelectTexture -*/ -void GL_SelectTexture( int unit ) -{ - if ( glState.currenttmu == unit ) - { - return; - } - - if (!(unit >= 0 && unit <= 31)) - ri.Error( ERR_DROP, "GL_SelectTexture: unit = %i", unit ); - - if (!qglActiveTextureARB) - ri.Error( ERR_DROP, "GL_SelectTexture: multitexture disabled" ); - - qglActiveTextureARB( GL_TEXTURE0_ARB + unit ); - - glState.currenttmu = unit; -} - /* ** GL_BindToTMU */ void GL_BindToTMU( image_t *image, int tmu ) { - int texnum; - int oldtmu = glState.currenttmu; + GLuint texture = (tmu == TB_COLORMAP) ? tr.defaultImage->texnum : 0; + GLenum target = GL_TEXTURE_2D; - if (!image) - texnum = 0; - else - texnum = image->texnum; + if (image) + { + if (image->flags & IMGFLAG_CUBEMAP) + target = GL_TEXTURE_CUBE_MAP; - if ( glState.currenttextures[tmu] != texnum ) { - GL_SelectTexture( tmu ); - if (image) - image->frameUsed = tr.frameCount; - glState.currenttextures[tmu] = texnum; - - if (image && (image->flags & IMGFLAG_CUBEMAP)) - qglBindTexture( GL_TEXTURE_CUBE_MAP, texnum ); - else - qglBindTexture( GL_TEXTURE_2D, texnum ); - GL_SelectTexture( oldtmu ); + image->frameUsed = tr.frameCount; + texture = image->texnum; } + else + { + ri.Printf(PRINT_WARNING, "GL_BindToTMU: NULL image\n"); + } + + GL_BindMultiTexture(GL_TEXTURE0_ARB + tmu, target, texture); } @@ -141,39 +89,6 @@ void GL_Cull( int cullType ) { glState.faceCulling = cullType; } -/* -** GL_TexEnv -*/ -void GL_TexEnv( int env ) -{ - if ( env == glState.texEnv[glState.currenttmu] ) - { - return; - } - - glState.texEnv[glState.currenttmu] = env; - - - switch ( env ) - { - case GL_MODULATE: - qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); - break; - case GL_REPLACE: - qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE ); - break; - case GL_DECAL: - qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL ); - break; - case GL_ADD: - qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD ); - break; - default: - ri.Error( ERR_DROP, "GL_TexEnv: invalid env '%d' passed", env ); - break; - } -} - /* ** GL_State ** @@ -855,6 +770,7 @@ void RE_StretchRaw (int x, int y, int w, int h, int cols, int rows, const byte * } RE_UploadCinematic (w, h, cols, rows, data, client, dirty); + GL_BindToTMU(tr.scratchImage[client], TB_COLORMAP); if ( r_speeds->integer ) { end = ri.Milliseconds(); @@ -895,23 +811,30 @@ void RE_StretchRaw (int x, int y, int w, int h, int cols, int rows, const byte * } void RE_UploadCinematic (int w, int h, int cols, int rows, const byte *data, int client, qboolean dirty) { + GLuint texture; - GL_Bind( tr.scratchImage[client] ); + if (!tr.scratchImage[client]) + { + ri.Printf(PRINT_WARNING, "RE_UploadCinematic: scratch images not initialized\n"); + return; + } + + texture = tr.scratchImage[client]->texnum; // if the scratchImage isn't in the format we want, specify it as a new texture if ( cols != tr.scratchImage[client]->width || rows != tr.scratchImage[client]->height ) { tr.scratchImage[client]->width = tr.scratchImage[client]->uploadWidth = cols; tr.scratchImage[client]->height = tr.scratchImage[client]->uploadHeight = rows; - qglTexImage2D( GL_TEXTURE_2D, 0, GL_RGB8, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data ); - qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); - qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); - qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); + qglTextureImage2D(texture, GL_TEXTURE_2D, 0, GL_RGB8, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); + qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } else { if (dirty) { // otherwise, just subimage upload it so that drivers can tell we are going to be changing // it and don't try and do a texture compression - qglTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, data ); + qglTextureSubImage2D(texture, GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, data); } } } @@ -1071,11 +994,10 @@ const void *RB_DrawSurfs( const void *data ) { // If we're using multisampling, resolve the depth first FBO_FastBlit(tr.renderFbo, NULL, tr.msaaResolveFbo, NULL, GL_DEPTH_BUFFER_BIT, GL_NEAREST); } - else if (tr.renderFbo == NULL) + else if (tr.renderFbo == NULL && tr.renderDepthImage) { // If we're rendering directly to the screen, copy the depth to a texture - GL_BindToTMU(tr.renderDepthImage, 0); - qglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, glConfig.vidWidth, glConfig.vidHeight, 0); + qglCopyTextureImage2D(tr.renderDepthImage->texnum, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, glConfig.vidWidth, glConfig.vidHeight, 0); } if (r_ssao->integer) @@ -1315,10 +1237,8 @@ const void *RB_DrawSurfs( const void *data ) { cubemap_t *cubemap = &tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex]; FBO_Bind(NULL); - GL_SelectTexture(TB_CUBEMAP); - GL_BindToTMU(cubemap->image, TB_CUBEMAP); - qglGenerateMipmapEXT(GL_TEXTURE_CUBE_MAP); - GL_SelectTexture(0); + if (cubemap && cubemap->image) + qglGenerateTextureMipmap(cubemap->image->texnum, GL_TEXTURE_CUBE_MAP); } return (const void *)(cmd + 1); @@ -1395,7 +1315,7 @@ void RB_ShowImages( void ) { { vec4_t quadVerts[4]; - GL_Bind(image); + GL_BindToTMU(image, TB_COLORMAP); VectorSet4(quadVerts[0], x, y, 0, 1); VectorSet4(quadVerts[1], x + w, y, 0, 1); @@ -1571,21 +1491,18 @@ const void *RB_CapShadowMap(const void *data) if (cmd->map != -1) { - GL_SelectTexture(0); if (cmd->cubeSide != -1) { if (tr.shadowCubemaps[cmd->map]) { - GL_Bind(tr.shadowCubemaps[cmd->map]); - qglCopyTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + cmd->cubeSide, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - ( backEnd.refdef.y + PSHADOW_MAP_SIZE ), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0); + qglCopyTextureImage2D(tr.shadowCubemaps[cmd->map]->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_X + cmd->cubeSide, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - ( backEnd.refdef.y + PSHADOW_MAP_SIZE ), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0); } } else { if (tr.pshadowMaps[cmd->map]) { - GL_Bind(tr.pshadowMaps[cmd->map]); - qglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - ( backEnd.refdef.y + PSHADOW_MAP_SIZE ), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0); + qglCopyTextureImage2D(tr.pshadowMaps[cmd->map]->texnum, GL_TEXTURE_2D, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - (backEnd.refdef.y + PSHADOW_MAP_SIZE), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0); } } } @@ -1658,7 +1575,7 @@ const void *RB_PostProcess(const void *data) if (srcFbo) { - if (r_hdr->integer && (r_toneMap->integer || r_forceToneMap->integer) && qglActiveTextureARB) + if (r_hdr->integer && (r_toneMap->integer || r_forceToneMap->integer)) { autoExposure = r_autoExposure->integer || r_forceAutoExposure->integer; RB_ToneMap(srcFbo, srcBox, NULL, dstBox, autoExposure); @@ -1774,7 +1691,7 @@ const void *RB_ExportCubemaps(const void *data) { char filename[MAX_QPATH]; cubemap_t *cubemap = &tr.cubemaps[i]; - char *p = cubemapPixels; + byte *p = cubemapPixels; for (j = 0; j < 6; j++) { diff --git a/code/renderergl2/tr_dsa.c b/code/renderergl2/tr_dsa.c new file mode 100644 index 00000000..55a731d9 --- /dev/null +++ b/code/renderergl2/tr_dsa.c @@ -0,0 +1,132 @@ +/* +=========================================================================== +Copyright (C) 2016 James Canete + +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 Street, Fifth Floor, Boston, MA 02110-1301, USA. +=========================================================================== +*/ + +#include "tr_local.h" + +#include "tr_dsa.h" + +static struct +{ + GLuint textures[NUM_TEXTURE_BUNDLES]; + GLenum texunit; +} +glDsaState; + +void GL_BindNullTextures() +{ + int i; + + if (glRefConfig.directStateAccess) + { + for (i = 0; i < NUM_TEXTURE_BUNDLES; i++) + { + qglBindMultiTexture(GL_TEXTURE0_ARB + i, GL_TEXTURE_2D, 0); + glDsaState.textures[i] = 0; + } + } + else + { + for (i = 0; i < NUM_TEXTURE_BUNDLES; i++) + { + qglActiveTextureARB(GL_TEXTURE0_ARB + i); + qglBindTexture(GL_TEXTURE_2D, 0); + glDsaState.textures[i] = 0; + } + + qglActiveTextureARB(GL_TEXTURE0_ARB); + glDsaState.texunit = GL_TEXTURE0_ARB; + } +} + +void GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) +{ + GLuint tmu = texunit - GL_TEXTURE0_ARB; + + if (glDsaState.textures[tmu] == texture) + return; + + qglBindMultiTexture(texunit, target, texture); + glDsaState.textures[tmu] = texture; +} + +GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) +{ + if (glDsaState.texunit != texunit) + { + qglActiveTextureARB(texunit); + glDsaState.texunit = texunit; + } + + qglBindTexture(target, texture); +} + +GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param) +{ + GL_BindMultiTexture(glDsaState.texunit, target, texture); + qglTexParameterf(target, pname, param); +} + +GLvoid APIENTRY GLDSA_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param) +{ + GL_BindMultiTexture(glDsaState.texunit, target, texture); + qglTexParameteri(target, pname, param); +} + +GLvoid APIENTRY GLDSA_TextureImage2D(GLuint texture, GLenum target, GLint level, GLint internalformat, + GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) +{ + GL_BindMultiTexture(glDsaState.texunit, target, texture); + qglTexImage2D(target, level, internalformat, width, height, border, format, type, pixels); +} + +GLvoid APIENTRY GLDSA_TextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) +{ + GL_BindMultiTexture(glDsaState.texunit, target, texture); + qglTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); +} + +GLvoid APIENTRY GLDSA_CopyTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat, + GLint x, GLint y, GLsizei width, GLsizei height, GLint border) +{ + GL_BindMultiTexture(glDsaState.texunit, target, texture); + qglCopyTexImage2D(target, level, internalformat, x, y, width, height, border); +} + +GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat, + GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) +{ + GL_BindMultiTexture(glDsaState.texunit, target, texture); + qglCompressedTexImage2DARB(target, level, internalformat, width, height, border, imageSize, data); +} + +GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, + GLsizei imageSize, const GLvoid *data) +{ + GL_BindMultiTexture(glDsaState.texunit, target, texture); + qglCompressedTexSubImage2DARB(target, level, xoffset, yoffset, width, height, format, imageSize, data); +} + +GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target) +{ + GL_BindMultiTexture(glDsaState.texunit, target, texture); + qglGenerateMipmapEXT(target); +} diff --git a/code/renderergl2/tr_dsa.h b/code/renderergl2/tr_dsa.h new file mode 100644 index 00000000..c166b9f3 --- /dev/null +++ b/code/renderergl2/tr_dsa.h @@ -0,0 +1,46 @@ +/* +=========================================================================== +Copyright (C) 2016 James Canete + +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 Street, Fifth Floor, Boston, MA 02110-1301, USA. +=========================================================================== +*/ + +#ifndef __TR_DSA_H__ +#define __TR_DSA_H__ + +#include "../renderercommon/qgl.h" + +void GL_BindNullTextures(void); +void GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture); + +GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture); +GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLvoid APIENTRY GLDSA_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param); +GLvoid APIENTRY GLDSA_TextureImage2D(GLuint texture, GLenum target, GLint level, GLint internalformat, + GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLvoid APIENTRY GLDSA_TextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +GLvoid APIENTRY GLDSA_CopyTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat, + GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat, + GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, + GLsizei imageSize, const GLvoid *data); + +GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target); + +#endif diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index 91db0632..eec70879 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -28,6 +28,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #endif #include "tr_local.h" +#include "tr_dsa.h" // GL_EXT_draw_range_elements void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); @@ -184,6 +185,23 @@ void (APIENTRY * qglDeleteVertexArraysARB)(GLsizei n, const GLuint *arrays); void (APIENTRY * qglGenVertexArraysARB)(GLsizei n, GLuint *arrays); GLboolean (APIENTRY * qglIsVertexArrayARB)(GLuint array); +// GL_EXT_direct_state_access +GLvoid (APIENTRY * qglBindMultiTexture)(GLenum texunit, GLenum target, GLuint texture); +GLvoid (APIENTRY * qglTextureParameterf)(GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLvoid (APIENTRY * qglTextureParameteri)(GLuint texture, GLenum target, GLenum pname, GLint param); +GLvoid (APIENTRY * qglTextureImage2D)(GLuint texture, GLenum target, GLint level, GLint internalformat, + GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +GLvoid (APIENTRY * qglTextureSubImage2D)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); +GLvoid (APIENTRY * qglCopyTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat, + GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLvoid (APIENTRY * qglCompressedTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat, + GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +GLvoid (APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum target, GLint level, + GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, + GLsizei imageSize, const GLvoid *data); +GLvoid (APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target); + static qboolean GLimp_HaveExtension(const char *ext) { const char *ptr = Q_stristr( glConfig.extensions_string, ext ); @@ -750,4 +768,38 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } + // GL_EXT_direct_state_access + extension = "GL_EXT_direct_state_access"; + qglBindMultiTexture = GLDSA_BindMultiTexture; + qglTextureParameterf = GLDSA_TextureParameterf; + qglTextureParameteri = GLDSA_TextureParameteri; + qglTextureImage2D = GLDSA_TextureImage2D; + qglTextureSubImage2D = GLDSA_TextureSubImage2D; + qglCopyTextureImage2D = GLDSA_CopyTextureImage2D; + qglCompressedTextureImage2D = GLDSA_CompressedTextureImage2D; + qglCompressedTextureSubImage2D = GLDSA_CompressedTextureSubImage2D; + qglGenerateTextureMipmap = GLDSA_GenerateTextureMipmap; + glRefConfig.directStateAccess = qfalse; + if (GLimp_HaveExtension(extension)) + { + if (r_ext_direct_state_access->integer) + { + glRefConfig.directStateAccess = qtrue; + qglBindMultiTexture = (void *)SDL_GL_GetProcAddress("glBindMultiTextureEXT"); + qglTextureParameterf = (void *)SDL_GL_GetProcAddress("glTextureParameterfEXT"); + qglTextureParameteri = (void *)SDL_GL_GetProcAddress("glTextureParameteriEXT"); + qglTextureImage2D = (void *)SDL_GL_GetProcAddress("glTextureImage2DEXT"); + qglTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glTextureSubImage2DEXT"); + qglCopyTextureImage2D = (void *)SDL_GL_GetProcAddress("glCopyTextureImage2DEXT"); + qglCompressedTextureImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureImage2DEXT"); + qglCompressedTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureSubImage2DEXT"); + qglGenerateTextureMipmap = (void *)SDL_GL_GetProcAddress("glGenerateTextureMipmapEXT"); + } + + ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess ? 1 : 0], extension); + } + else + { + ri.Printf(PRINT_ALL, result[2], extension); + } } diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index c2f9bb15..7d53d463 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -22,6 +22,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // tr_image.c #include "tr_local.h" +#include "tr_dsa.h" + static byte s_intensitytable[256]; static unsigned char s_gammatable[256]; @@ -114,9 +116,8 @@ void GL_TextureMode( const char *string ) { for ( i = 0 ; i < tr.numImages ; i++ ) { glt = tr.images[ i ]; if ( glt->flags & IMGFLAG_MIPMAP ) { - GL_Bind (glt); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); + qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); + qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); } } } @@ -1817,7 +1818,7 @@ static void CompressMonoBlock(byte outdata[8], const byte indata[16]) } } -static void RawImage_UploadToRgtc2Texture(byte *data, int width, int height, int mip) +static void RawImage_UploadToRgtc2Texture(GLuint texture, byte *data, int width, int height, int mip) { int wBlocks, hBlocks, y, x, size; byte *compressedData, *p; @@ -1857,13 +1858,13 @@ static void RawImage_UploadToRgtc2Texture(byte *data, int width, int height, int } } - qglCompressedTexImage2DARB(GL_TEXTURE_2D, mip, GL_COMPRESSED_RG_RGTC2, width, height, 0, size, compressedData); + qglCompressedTextureImage2D(texture, GL_TEXTURE_2D, mip, GL_COMPRESSED_RG_RGTC2, width, height, 0, size, compressedData); ri.Hunk_FreeTempMemory(compressedData); } -static void RawImage_UploadTexture( byte *data, int x, int y, int width, int height, GLenum picFormat, int numMips, GLenum internalFormat, imgType_t type, imgFlags_t flags, qboolean subtexture ) +static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int width, int height, GLenum picFormat, int numMips, GLenum internalFormat, imgType_t type, imgFlags_t flags, qboolean subtexture ) { int dataFormat, dataType; qboolean rgtc = (internalFormat == GL_COMPRESSED_RG_RGTC2); @@ -1923,9 +1924,9 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei int size = ((width + 3) / 4) * ((height + 3) / 4) * bytesPer4x4Block; if (subtexture) - qglCompressedTexSubImage2DARB(GL_TEXTURE_2D, miplevel, x, y, width, height, internalFormat, size, data); + qglCompressedTextureSubImage2D(texture, GL_TEXTURE_2D, miplevel, x, y, width, height, internalFormat, size, data); else - qglCompressedTexImage2DARB(GL_TEXTURE_2D, miplevel, internalFormat, width, height, 0, size, data); + qglCompressedTextureImage2D(texture, GL_TEXTURE_2D, miplevel, internalFormat, width, height, 0, size, data); x >>= 1; y >>= 1; @@ -1957,13 +1958,13 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei } if ( subtexture ) - qglTexSubImage2D( GL_TEXTURE_2D, 0, x, y, width, height, dataFormat, dataType, data ); + qglTextureSubImage2D(texture, GL_TEXTURE_2D, 0, x, y, width, height, dataFormat, dataType, data ); else { if (rgtc) - RawImage_UploadToRgtc2Texture(data, width, height, 0); + RawImage_UploadToRgtc2Texture(texture, data, width, height, 0); else - qglTexImage2D(GL_TEXTURE_2D, 0, internalFormat, width, height, 0, dataFormat, dataType, data); + qglTextureImage2D(texture, GL_TEXTURE_2D, 0, internalFormat, width, height, 0, dataFormat, dataType, data); } if (flags & IMGFLAG_MIPMAP) @@ -1991,14 +1992,14 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei { x >>= 1; y >>= 1; - qglTexSubImage2D( GL_TEXTURE_2D, miplevel, x, y, width, height, dataFormat, dataType, data ); + qglTextureSubImage2D(texture, GL_TEXTURE_2D, miplevel, x, y, width, height, dataFormat, dataType, data ); } else { if (rgtc) - RawImage_UploadToRgtc2Texture(data, width, height, miplevel); + RawImage_UploadToRgtc2Texture(texture, data, width, height, miplevel); else - qglTexImage2D(GL_TEXTURE_2D, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data); + qglTextureImage2D(texture, GL_TEXTURE_2D, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data); } } } @@ -2027,14 +2028,14 @@ static void Upload32(byte *data, int x, int y, int width, int height, GLenum pic if (!data) { RawImage_ScaleToPower2(NULL, &width, &height, type, flags, NULL); - RawImage_UploadTexture(NULL, 0, 0, width, height, GL_RGBA8, 0, internalFormat, type, flags, qfalse); + RawImage_UploadTexture(image->texnum, NULL, 0, 0, width, height, GL_RGBA8, 0, internalFormat, type, flags, qfalse); goto done; } else if (!subtexture) { if (picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT) { - RawImage_UploadTexture(data, 0, 0, width, height, picFormat, numMips, internalFormat, type, flags, qfalse); + RawImage_UploadTexture(image->texnum, data, 0, 0, width, height, picFormat, numMips, internalFormat, type, flags, qfalse); goto done; } notScaled = RawImage_ScaleToPower2(&data, &width, &height, type, flags, &resampledBuffer); @@ -2074,12 +2075,12 @@ static void Upload32(byte *data, int x, int y, int width, int height, GLenum pic if (subtexture) { // FIXME: Incorrect if original texture was not a power of 2 texture or picmipped - RawImage_UploadTexture(data, x, y, width, height, GL_RGBA8, 0, internalFormat, type, flags, qtrue); + RawImage_UploadTexture(image->texnum, data, x, y, width, height, GL_RGBA8, 0, internalFormat, type, flags, qtrue); GL_CheckErrors(); return; } - RawImage_UploadTexture(data, 0, 0, width, height, GL_RGBA8, 0, internalFormat, type, flags, qfalse); + RawImage_UploadTexture(image->texnum, data, 0, 0, width, height, GL_RGBA8, 0, internalFormat, type, flags, qfalse); done: @@ -2089,19 +2090,19 @@ done: if (mipmap) { if ( textureFilterAnisotropic ) - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, + qglTextureParameteri( image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, (GLint)Com_Clamp( 1, maxAnisotropy, r_ext_max_anisotropy->integer ) ); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); + qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); + qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); } else { if ( textureFilterAnisotropic ) - qglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1 ); + qglTextureParameteri(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } // Fix for sampling depth buffer on old nVidia cards @@ -2112,9 +2113,9 @@ done: case GL_DEPTH_COMPONENT16_ARB: case GL_DEPTH_COMPONENT24_ARB: case GL_DEPTH_COMPONENT32_ARB: - qglTexParameterf(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE ); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST ); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); + qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); + qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); break; default: break; @@ -2177,46 +2178,32 @@ image_t *R_CreateImage2( const char *name, byte *pic, int width, int height, GLe image->internalFormat = internalFormat; - - // lightmaps are always allocated on TMU 1 - if ( qglActiveTextureARB && isLightmap ) { - image->TMU = 1; - } else { - image->TMU = 0; - } - - if ( qglActiveTextureARB ) { - GL_SelectTexture( image->TMU ); - } - - GL_Bind(image); - if (image->flags & IMGFLAG_CUBEMAP) { - qglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - qglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - qglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - qglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); if (image->flags & IMGFLAG_MIPMAP) { - qglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); } else { - qglTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } - qglTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); + qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); + qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); + qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); + qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); + qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); + qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); if (image->flags & IMGFLAG_MIPMAP) - qglGenerateMipmapEXT(GL_TEXTURE_CUBE_MAP); + qglGenerateTextureMipmap(image->texnum, GL_TEXTURE_CUBE_MAP); image->uploadWidth = width; image->uploadHeight = height; @@ -2225,12 +2212,10 @@ image_t *R_CreateImage2( const char *name, byte *pic, int width, int height, GLe { Upload32( pic, 0, 0, image->width, image->height, picFormat, numMips, image ); - qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode ); - qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode ); + qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode); + qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode); } - GL_SelectTexture( 0 ); - hash = generateHashValue(name); image->next = hashTable[hash]; hashTable[hash] = image; @@ -2254,15 +2239,7 @@ image_t *R_CreateImage(const char *name, byte *pic, int width, int height, imgTy void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int height ) { - if (qglActiveTextureARB) { - GL_SelectTexture(image->TMU); - } - - GL_Bind(image); - Upload32(pic, x, y, width, height, GL_RGBA8, 0, image); - - GL_SelectTexture(0); } //=================================================================== @@ -2829,11 +2806,10 @@ void R_CreateBuiltinImages( void ) { for ( x = 0; x < 4; x++) { tr.sunShadowDepthImage[x] = R_CreateImage(va("*sunshadowdepth%i", x), NULL, r_shadowMapSize->integer, r_shadowMapSize->integer, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB); - GL_Bind(tr.sunShadowDepthImage[x]); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); - qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); + qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); + qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); + qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); } tr.screenShadowImage = R_CreateImage("*screenShadow", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_RGBA8); @@ -2946,15 +2922,7 @@ void R_DeleteTextures( void ) { tr.numImages = 0; - Com_Memset( glState.currenttextures, 0, sizeof( glState.currenttextures ) ); - if ( qglActiveTextureARB ) { - GL_SelectTexture( 1 ); - qglBindTexture( GL_TEXTURE_2D, 0 ); - GL_SelectTexture( 0 ); - qglBindTexture( GL_TEXTURE_2D, 0 ); - } else { - qglBindTexture( GL_TEXTURE_2D, 0 ); - } + GL_BindNullTextures(); } /* diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 1aa4d4eb..2d7326e3 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -23,6 +23,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "tr_local.h" +#include "tr_dsa.h" + glconfig_t glConfig; glRefConfig_t glRefConfig; qboolean textureFilterAnisotropic = qfalse; @@ -106,6 +108,7 @@ cvar_t *r_ext_framebuffer_multisample; cvar_t *r_arb_seamless_cube_map; cvar_t *r_arb_vertex_type_2_10_10_10_rev; cvar_t *r_arb_vertex_array_object; +cvar_t *r_ext_direct_state_access; cvar_t *r_mergeMultidraws; cvar_t *r_mergeLeafSurfaces; @@ -837,7 +840,7 @@ void R_ScreenShotJPEG_f (void) { R_ExportCubemaps ================== */ -void R_ExportCubemaps() +void R_ExportCubemaps(void) { exportCubemapsCommand_t *cmd; @@ -955,19 +958,10 @@ void GL_SetDefaultState( void ) qglColor4f (1,1,1,1); - // initialize downstream texture unit if we're running - // in a multitexture environment - if ( qglActiveTextureARB ) { - GL_SelectTexture( 1 ); - GL_TextureMode( r_textureMode->string ); - GL_TexEnv( GL_MODULATE ); - qglDisable( GL_TEXTURE_2D ); - GL_SelectTexture( 0 ); - } + GL_BindNullTextures(); qglEnable(GL_TEXTURE_2D); GL_TextureMode( r_textureMode->string ); - GL_TexEnv( GL_MODULATE ); //qglShadeModel( GL_SMOOTH ); qglDepthFunc( GL_LEQUAL ); @@ -1180,6 +1174,7 @@ void R_Register( void ) r_arb_seamless_cube_map = ri.Cvar_Get( "r_arb_seamless_cube_map", "0", CVAR_ARCHIVE | CVAR_LATCH); r_arb_vertex_type_2_10_10_10_rev = ri.Cvar_Get( "r_arb_vertex_type_2_10_10_10_rev", "1", CVAR_ARCHIVE | CVAR_LATCH); r_arb_vertex_array_object = ri.Cvar_Get( "r_arb_vertex_array_object", "1", CVAR_ARCHIVE | CVAR_LATCH); + r_ext_direct_state_access = ri.Cvar_Get("r_ext_direct_state_access", "1", CVAR_ARCHIVE | CVAR_LATCH); r_ext_texture_filter_anisotropic = ri.Cvar_Get( "r_ext_texture_filter_anisotropic", "0", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 22e935aa..2db7eaea 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1351,8 +1351,6 @@ typedef struct { // the renderer front end should never modify glstate_t typedef struct { - int currenttextures[NUM_TEXTURE_BUNDLES]; - int currenttmu; qboolean finishCalled; int texEnv[2]; int faceCulling; @@ -1420,6 +1418,7 @@ typedef struct { qboolean floatLightmap; qboolean vertexArrayObject; + qboolean directStateAccess; } glRefConfig_t; @@ -1718,6 +1717,7 @@ extern cvar_t *r_ext_framebuffer_multisample; extern cvar_t *r_arb_seamless_cube_map; extern cvar_t *r_arb_vertex_type_2_10_10_10_rev; extern cvar_t *r_arb_vertex_array_object; +extern cvar_t *r_ext_direct_state_access; extern cvar_t *r_nobind; // turns off binding to appropriate textures extern cvar_t *r_singleShader; // make most world faces use default shader @@ -1882,17 +1882,14 @@ void R_RotateForEntity( const trRefEntity_t *ent, const viewParms_t *viewParms, /* ** GL wrapper/helper functions */ -void GL_Bind( image_t *image ); void GL_BindToTMU( image_t *image, int tmu ); void GL_SetDefaultState (void); -void GL_SelectTexture( int unit ); void GL_TextureMode( const char *string ); void GL_CheckErrs( char *file, int line ); #define GL_CheckErrors(...) GL_CheckErrs(__FILE__, __LINE__) void GL_State( unsigned long stateVector ); void GL_SetProjectionMatrix(mat4_t matrix); void GL_SetModelviewMatrix(mat4_t matrix); -void GL_TexEnv( int env ); void GL_Cull( int cullType ); #define GLS_SRCBLEND_ZERO 0x00000001 diff --git a/code/renderergl2/tr_main.c b/code/renderergl2/tr_main.c index ca5327cd..6c78930b 100644 --- a/code/renderergl2/tr_main.c +++ b/code/renderergl2/tr_main.c @@ -2030,7 +2030,7 @@ void R_DebugGraphics( void ) { R_IssuePendingRenderCommands(); - GL_Bind( tr.whiteImage); + GL_BindToTMU(tr.whiteImage, TB_COLORMAP); GL_Cull( CT_FRONT_SIDED ); ri.CM_DrawDebugSurface( R_DebugPolygon ); } diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index fde95e56..5e59c80f 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -101,11 +101,9 @@ static void R_BindAnimatedImageToTMU( textureBundle_t *bundle, int tmu ) { int index; if ( bundle->isVideoMap ) { - int oldtmu = glState.currenttmu; - GL_SelectTexture(tmu); ri.CIN_RunCinematic(bundle->videoMapHandle); ri.CIN_UploadCinematic(bundle->videoMapHandle); - GL_SelectTexture(oldtmu); + GL_BindToTMU(tr.scratchImage[bundle->videoMapHandle], tmu); return; } @@ -136,7 +134,7 @@ Draws triangle outlines for debugging ================ */ static void DrawTris (shaderCommands_t *input) { - GL_Bind( tr.whiteImage ); + GL_BindToTMU( tr.whiteImage, TB_COLORMAP ); GL_State( GLS_POLYMODE_LINE | GLS_DEPTHMASK_TRUE ); qglDepthRange( 0, 0 ); @@ -414,7 +412,7 @@ static void ProjectDlightTexture( void ) { vector[3] = scale; GLSL_SetUniformVec4(sp, UNIFORM_DLIGHTINFO, vector); - GL_Bind( tr.dlightImage ); + GL_BindToTMU( tr.dlightImage, TB_COLORMAP ); // include GLS_DEPTHFUNC_EQUAL so alpha tested surfaces don't add light // where they aren't rendered @@ -862,11 +860,7 @@ static void ForwardDlight( void ) { } if (r_dlightMode->integer >= 2) - { - GL_SelectTexture(TB_SHADOWMAP); - GL_Bind(tr.shadowCubemaps[l]); - GL_SelectTexture(0); - } + GL_BindToTMU(tr.shadowCubemaps[l], TB_SHADOWMAP); ComputeTexMods( pStage, TB_DIFFUSEMAP, texMatrix, texOffTurb ); GLSL_SetUniformVec4(sp, UNIFORM_DIFFUSETEXMATRIX, texMatrix); @@ -1266,7 +1260,7 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) if ( backEnd.depthFill ) { if (!(pStage->stateBits & GLS_ATEST_BITS)) - GL_BindToTMU( tr.whiteImage, 0 ); + GL_BindToTMU( tr.whiteImage, TB_COLORMAP ); else if ( pStage->bundle[TB_COLORMAP].image[0] != 0 ) R_BindAnimatedImageToTMU( &pStage->bundle[TB_COLORMAP], TB_COLORMAP ); } diff --git a/code/renderergl2/tr_shadows.c b/code/renderergl2/tr_shadows.c index 13fbfdf7..76371752 100644 --- a/code/renderergl2/tr_shadows.c +++ b/code/renderergl2/tr_shadows.c @@ -206,7 +206,7 @@ void RB_ShadowTessEnd( void ) { // draw the silhouette edges - GL_Bind( tr.whiteImage ); + GL_BindToTMU( tr.whiteImage, TB_COLORMAP ); GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ZERO ); qglColor3f( 0.2f, 0.2f, 0.2f ); @@ -256,7 +256,7 @@ void RB_ShadowFinish( void ) { qglDisable (GL_CLIP_PLANE0); GL_Cull( CT_TWO_SIDED ); - GL_Bind( tr.whiteImage ); + GL_BindToTMU( tr.whiteImage, TB_COLORMAP ); qglLoadIdentity (); diff --git a/code/renderergl2/tr_sky.c b/code/renderergl2/tr_sky.c index 05ff8f94..840d0149 100644 --- a/code/renderergl2/tr_sky.c +++ b/code/renderergl2/tr_sky.c @@ -374,7 +374,7 @@ static void DrawSkySide( struct image_s *image, const int mins[2], const int max //tess.numIndexes = 0; tess.firstIndex = tess.numIndexes; - GL_Bind( image ); + GL_BindToTMU( image, TB_COLORMAP ); GL_Cull( CT_TWO_SIDED ); for ( t = mins[1]+HALF_SKY_SUBDIVISIONS; t <= maxs[1]+HALF_SKY_SUBDIVISIONS; t++ ) diff --git a/code/renderergl2/tr_surface.c b/code/renderergl2/tr_surface.c index c5b1b0f8..72cd610e 100644 --- a/code/renderergl2/tr_surface.c +++ b/code/renderergl2/tr_surface.c @@ -575,7 +575,7 @@ static void RB_SurfaceBeam( void ) VectorAdd( start_points[i], direction, end_points[i] ); } - GL_Bind( tr.whiteImage ); + GL_BindToTMU( tr.whiteImage, TB_COLORMAP ); GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); @@ -1518,7 +1518,7 @@ Draws x/y/z lines from the origin for orientation debugging static void RB_SurfaceAxis( void ) { // FIXME: implement this #if 0 - GL_Bind( tr.whiteImage ); + GL_BindToTMU( tr.whiteImage, TB_COLORMAP ); GL_State( GLS_DEFAULT ); qglLineWidth( 3 ); qglBegin( GL_LINES ); diff --git a/misc/msvc12/opengl2.vcxproj b/misc/msvc12/opengl2.vcxproj index d66ea9b3..2f91590e 100644 --- a/misc/msvc12/opengl2.vcxproj +++ b/misc/msvc12/opengl2.vcxproj @@ -514,6 +514,7 @@ cscript.exe glsl_stringify.vbs ..\..\code\renderergl2\glsl\tonemap_vp.glsl ..\.. + diff --git a/misc/msvc12/opengl2.vcxproj.filters b/misc/msvc12/opengl2.vcxproj.filters index 480b8547..d8cded4d 100644 --- a/misc/msvc12/opengl2.vcxproj.filters +++ b/misc/msvc12/opengl2.vcxproj.filters @@ -283,6 +283,7 @@ zlib + From f70e9dac011308e8eabd3bb0efe00c297bb92f5b Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 18 Jan 2016 23:30:36 -0800 Subject: [PATCH 092/480] OpenGL2: Direct state access, part 2: Uniforms. --- code/renderercommon/qgl.h | 14 ++++++ code/renderergl2/tr_dsa.c | 71 ++++++++++++++++++++++++++- code/renderergl2/tr_dsa.h | 19 +++++++- code/renderergl2/tr_extensions.c | 32 ++++++++++++ code/renderergl2/tr_glsl.c | 84 +++++--------------------------- code/renderergl2/tr_init.c | 3 +- code/renderergl2/tr_local.h | 2 - 7 files changed, 147 insertions(+), 78 deletions(-) diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h index 1b042e91..516ff5e3 100644 --- a/code/renderercommon/qgl.h +++ b/code/renderercommon/qgl.h @@ -753,6 +753,20 @@ extern GLvoid(APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum GLsizei imageSize, const GLvoid *data); extern GLvoid(APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target); +extern GLvoid(APIENTRY * qglProgramUniform1i)(GLuint program, GLint location, GLint v0); +extern GLvoid(APIENTRY * qglProgramUniform1f)(GLuint program, GLint location, GLfloat v0); +extern GLvoid(APIENTRY * qglProgramUniform2f)(GLuint program, GLint location, + GLfloat v0, GLfloat v1); +extern GLvoid(APIENTRY * qglProgramUniform3f)(GLuint program, GLint location, + GLfloat v0, GLfloat v1, GLfloat v2); +extern GLvoid(APIENTRY * qglProgramUniform4f)(GLuint program, GLint location, + GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +extern GLvoid(APIENTRY * qglProgramUniform1fv)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +extern GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); + #if defined(WIN32) // WGL_ARB_create_context diff --git a/code/renderergl2/tr_dsa.c b/code/renderergl2/tr_dsa.c index 55a731d9..9472bb40 100644 --- a/code/renderergl2/tr_dsa.c +++ b/code/renderergl2/tr_dsa.c @@ -26,6 +26,8 @@ static struct { GLuint textures[NUM_TEXTURE_BUNDLES]; GLenum texunit; + + GLuint program; } glDsaState; @@ -55,15 +57,16 @@ void GL_BindNullTextures() } } -void GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) +int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) { GLuint tmu = texunit - GL_TEXTURE0_ARB; if (glDsaState.textures[tmu] == texture) - return; + return 0; qglBindMultiTexture(texunit, target, texture); glDsaState.textures[tmu] = texture; + return 1; } GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) @@ -130,3 +133,67 @@ GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target) GL_BindMultiTexture(glDsaState.texunit, target, texture); qglGenerateMipmapEXT(target); } + +void GL_BindNullProgram() +{ + qglUseProgramObjectARB(0); + glDsaState.program = 0; +} + +int GL_UseProgramObject(GLuint program) +{ + if (glDsaState.program == program) + return 0; + + qglUseProgramObjectARB(program); + glDsaState.program = program; + return 1; +} + +GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0) +{ + GL_UseProgramObject(program); + qglUniform1iARB(location, v0); +} + +GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0) +{ + GL_UseProgramObject(program); + qglUniform1fARB(location, v0); +} + +GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location, + GLfloat v0, GLfloat v1) +{ + GL_UseProgramObject(program); + qglUniform2fARB(location, v0, v1); +} + +GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location, + GLfloat v0, GLfloat v1, GLfloat v2) +{ + GL_UseProgramObject(program); + qglUniform3fARB(location, v0, v1, v2); +} + +GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location, + GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) +{ + GL_UseProgramObject(program); + qglUniform4fARB(location, v0, v1, v2, v3); +} + +GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location, + GLsizei count, const GLfloat *value) +{ + GL_UseProgramObject(program); + qglUniform1fvARB(location, count, value); +} + +GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value) +{ + GL_UseProgramObject(program); + qglUniformMatrix4fvARB(location, count, transpose, value); +} diff --git a/code/renderergl2/tr_dsa.h b/code/renderergl2/tr_dsa.h index c166b9f3..164ab065 100644 --- a/code/renderergl2/tr_dsa.h +++ b/code/renderergl2/tr_dsa.h @@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "../renderercommon/qgl.h" void GL_BindNullTextures(void); -void GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture); +int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture); GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture); GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param); @@ -43,4 +43,21 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target); +void GL_BindNullProgram(void); +int GL_UseProgramObject(GLuint program); + +GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0); +GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0); +GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location, + GLfloat v0, GLfloat v1); +GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location, + GLfloat v0, GLfloat v1, GLfloat v2); +GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location, + GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); + #endif diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index eec70879..e5bbd92e 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -202,6 +202,20 @@ GLvoid (APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum target GLsizei imageSize, const GLvoid *data); GLvoid (APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target); +GLvoid(APIENTRY * qglProgramUniform1i)(GLuint program, GLint location, GLint v0); +GLvoid(APIENTRY * qglProgramUniform1f)(GLuint program, GLint location, GLfloat v0); +GLvoid(APIENTRY * qglProgramUniform2f)(GLuint program, GLint location, + GLfloat v0, GLfloat v1); +GLvoid(APIENTRY * qglProgramUniform3f)(GLuint program, GLint location, + GLfloat v0, GLfloat v1, GLfloat v2); +GLvoid(APIENTRY * qglProgramUniform4f)(GLuint program, GLint location, + GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLvoid(APIENTRY * qglProgramUniform1fv)(GLuint program, GLint location, + GLsizei count, const GLfloat *value); +GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location, + GLsizei count, GLboolean transpose, + const GLfloat *value); + static qboolean GLimp_HaveExtension(const char *ext) { const char *ptr = Q_stristr( glConfig.extensions_string, ext ); @@ -770,6 +784,7 @@ void GLimp_InitExtraExtensions() // GL_EXT_direct_state_access extension = "GL_EXT_direct_state_access"; + qglBindMultiTexture = GLDSA_BindMultiTexture; qglTextureParameterf = GLDSA_TextureParameterf; qglTextureParameteri = GLDSA_TextureParameteri; @@ -779,6 +794,15 @@ void GLimp_InitExtraExtensions() qglCompressedTextureImage2D = GLDSA_CompressedTextureImage2D; qglCompressedTextureSubImage2D = GLDSA_CompressedTextureSubImage2D; qglGenerateTextureMipmap = GLDSA_GenerateTextureMipmap; + + qglProgramUniform1i = GLDSA_ProgramUniform1i; + qglProgramUniform1f = GLDSA_ProgramUniform1f; + qglProgramUniform2f = GLDSA_ProgramUniform2f; + qglProgramUniform3f = GLDSA_ProgramUniform3f; + qglProgramUniform4f = GLDSA_ProgramUniform4f; + qglProgramUniform1fv = GLDSA_ProgramUniform1fv; + qglProgramUniformMatrix4fv = GLDSA_ProgramUniformMatrix4fv; + glRefConfig.directStateAccess = qfalse; if (GLimp_HaveExtension(extension)) { @@ -794,6 +818,14 @@ void GLimp_InitExtraExtensions() qglCompressedTextureImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureImage2DEXT"); qglCompressedTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureSubImage2DEXT"); qglGenerateTextureMipmap = (void *)SDL_GL_GetProcAddress("glGenerateTextureMipmapEXT"); + + qglProgramUniform1i = (void *)SDL_GL_GetProcAddress("glProgramUniform1iEXT"); + qglProgramUniform1f = (void *)SDL_GL_GetProcAddress("glProgramUniform1fEXT"); + qglProgramUniform2f = (void *)SDL_GL_GetProcAddress("glProgramUniform2fEXT"); + qglProgramUniform3f = (void *)SDL_GL_GetProcAddress("glProgramUniform3fEXT"); + qglProgramUniform4f = (void *)SDL_GL_GetProcAddress("glProgramUniform4fEXT"); + qglProgramUniform1fv = (void *)SDL_GL_GetProcAddress("glProgramUniform1fvEXT"); + qglProgramUniformMatrix4fv = (void *)SDL_GL_GetProcAddress("glProgramUniformMatrix4fvEXT"); } ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess ? 1 : 0], extension); diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index 14e20105..eaa7c8f5 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // tr_glsl.c #include "tr_local.h" -void GLSL_BindNullProgram(void); +#include "tr_dsa.h" extern const char *fallbackShader_bokeh_vp; extern const char *fallbackShader_bokeh_fp; @@ -482,11 +482,6 @@ static void GLSL_ShowProgramUniforms(GLhandleARB program) GLenum type; char uniformName[1000]; - // install the executables in the program object as part of current state. - qglUseProgramObjectARB(program); - - // check for GL Errors - // query the number of active uniforms qglGetObjectParameterivARB(program, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &count); @@ -497,8 +492,6 @@ static void GLSL_ShowProgramUniforms(GLhandleARB program) ri.Printf(PRINT_DEVELOPER, "active uniform: '%s'\n", uniformName); } - - qglUseProgramObjectARB(0); } static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int attribs, const char *vpCode, const char *fpCode) @@ -703,7 +696,7 @@ void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value) *compare = value; - qglUniform1iARB(uniforms[uniformNum], value); + qglProgramUniform1i(program->program, uniforms[uniformNum], value); } void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value) @@ -727,7 +720,7 @@ void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat valu *compare = value; - qglUniform1fARB(uniforms[uniformNum], value); + qglProgramUniform1f(program->program, uniforms[uniformNum], value); } void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t v) @@ -752,7 +745,7 @@ void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t compare[0] = v[0]; compare[1] = v[1]; - qglUniform2fARB(uniforms[uniformNum], v[0], v[1]); + qglProgramUniform2f(program->program, uniforms[uniformNum], v[0], v[1]); } void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t v) @@ -776,7 +769,7 @@ void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t VectorCopy(v, compare); - qglUniform3fARB(uniforms[uniformNum], v[0], v[1], v[2]); + qglProgramUniform3f(program->program, uniforms[uniformNum], v[0], v[1], v[2]); } void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t v) @@ -800,7 +793,7 @@ void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t VectorCopy4(v, compare); - qglUniform4fARB(uniforms[uniformNum], v[0], v[1], v[2], v[3]); + qglProgramUniform4f(program->program, uniforms[uniformNum], v[0], v[1], v[2], v[3]); } void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_t v) @@ -824,7 +817,7 @@ void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_ VectorCopy5(v, compare); - qglUniform1fvARB(uniforms[uniformNum], 5, v); + qglProgramUniform1fv(program->program, uniforms[uniformNum], 5, v); } void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t matrix) @@ -848,7 +841,7 @@ void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t Mat4Copy(matrix, compare); - qglUniformMatrix4fvARB(uniforms[uniformNum], 1, GL_FALSE, matrix); + qglProgramUniformMatrix4fv(program->program, uniforms[uniformNum], 1, GL_FALSE, matrix); } void GLSL_DeleteGPUShader(shaderProgram_t *program) @@ -925,10 +918,8 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.genericShader[i]); - qglUseProgramObjectARB(tr.genericShader[i].program); GLSL_SetUniformInt(&tr.genericShader[i], UNIFORM_DIFFUSEMAP, TB_DIFFUSEMAP); GLSL_SetUniformInt(&tr.genericShader[i], UNIFORM_LIGHTMAP, TB_LIGHTMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.genericShader[i]); @@ -945,9 +936,7 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.textureColorShader); - qglUseProgramObjectARB(tr.textureColorShader.program); GLSL_SetUniformInt(&tr.textureColorShader, UNIFORM_TEXTUREMAP, TB_DIFFUSEMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.textureColorShader); @@ -993,9 +982,7 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.dlightShader[i]); - qglUseProgramObjectARB(tr.dlightShader[i].program); GLSL_SetUniformInt(&tr.dlightShader[i], UNIFORM_DIFFUSEMAP, TB_DIFFUSEMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.dlightShader[i]); @@ -1123,7 +1110,6 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.lightallShader[i]); - qglUseProgramObjectARB(tr.lightallShader[i].program); GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_DIFFUSEMAP, TB_DIFFUSEMAP); GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_LIGHTMAP, TB_LIGHTMAP); GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_NORMALMAP, TB_NORMALMAP); @@ -1131,7 +1117,6 @@ void GLSL_InitGPUShaders(void) GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_SPECULARMAP, TB_SPECULARMAP); GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_SHADOWMAP, TB_SHADOWMAP); GLSL_SetUniformInt(&tr.lightallShader[i], UNIFORM_CUBEMAP, TB_CUBEMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.lightallShader[i]); @@ -1164,9 +1149,7 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.pshadowShader); - qglUseProgramObjectARB(tr.pshadowShader.program); GLSL_SetUniformInt(&tr.pshadowShader, UNIFORM_SHADOWMAP, TB_DIFFUSEMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.pshadowShader); @@ -1183,9 +1166,7 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.down4xShader); - qglUseProgramObjectARB(tr.down4xShader.program); GLSL_SetUniformInt(&tr.down4xShader, UNIFORM_TEXTUREMAP, TB_DIFFUSEMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.down4xShader); @@ -1202,9 +1183,7 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.bokehShader); - qglUseProgramObjectARB(tr.bokehShader.program); GLSL_SetUniformInt(&tr.bokehShader, UNIFORM_TEXTUREMAP, TB_DIFFUSEMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.bokehShader); @@ -1221,10 +1200,8 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.tonemapShader); - qglUseProgramObjectARB(tr.tonemapShader.program); GLSL_SetUniformInt(&tr.tonemapShader, UNIFORM_TEXTUREMAP, TB_COLORMAP); GLSL_SetUniformInt(&tr.tonemapShader, UNIFORM_LEVELSMAP, TB_LEVELSMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.tonemapShader); @@ -1246,9 +1223,7 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.calclevels4xShader[i]); - qglUseProgramObjectARB(tr.calclevels4xShader[i].program); GLSL_SetUniformInt(&tr.calclevels4xShader[i], UNIFORM_TEXTUREMAP, TB_DIFFUSEMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.calclevels4xShader[i]); @@ -1279,13 +1254,11 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.shadowmaskShader); - qglUseProgramObjectARB(tr.shadowmaskShader.program); GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SCREENDEPTHMAP, TB_COLORMAP); GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SHADOWMAP, TB_SHADOWMAP); GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SHADOWMAP2, TB_SHADOWMAP2); GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SHADOWMAP3, TB_SHADOWMAP3); GLSL_SetUniformInt(&tr.shadowmaskShader, UNIFORM_SHADOWMAP4, TB_SHADOWMAP4); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.shadowmaskShader); @@ -1302,9 +1275,7 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.ssaoShader); - qglUseProgramObjectARB(tr.ssaoShader.program); GLSL_SetUniformInt(&tr.ssaoShader, UNIFORM_SCREENDEPTHMAP, TB_COLORMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.ssaoShader); @@ -1329,10 +1300,8 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.depthBlurShader[i]); - qglUseProgramObjectARB(tr.depthBlurShader[i].program); GLSL_SetUniformInt(&tr.depthBlurShader[i], UNIFORM_SCREENIMAGEMAP, TB_COLORMAP); GLSL_SetUniformInt(&tr.depthBlurShader[i], UNIFORM_SCREENDEPTHMAP, TB_LIGHTMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.depthBlurShader[i]); @@ -1350,9 +1319,7 @@ void GLSL_InitGPUShaders(void) GLSL_InitUniforms(&tr.testcubeShader); - qglUseProgramObjectARB(tr.testcubeShader.program); GLSL_SetUniformInt(&tr.testcubeShader, UNIFORM_TEXTUREMAP, TB_COLORMAP); - qglUseProgramObjectARB(0); GLSL_FinishGPUShader(&tr.testcubeShader); @@ -1376,7 +1343,7 @@ void GLSL_ShutdownGPUShaders(void) for (i = 0; i < ATTR_INDEX_COUNT; i++) qglDisableVertexAttribArrayARB(i); - GLSL_BindNullProgram(); + GL_BindNullProgram(); for ( i = 0; i < GENERICDEF_COUNT; i++) GLSL_DeleteGPUShader(&tr.genericShader[i]); @@ -1406,47 +1373,22 @@ void GLSL_ShutdownGPUShaders(void) for ( i = 0; i < 2; i++) GLSL_DeleteGPUShader(&tr.depthBlurShader[i]); - - glState.currentProgram = 0; - qglUseProgramObjectARB(0); } void GLSL_BindProgram(shaderProgram_t * program) { - if(!program) - { - GLSL_BindNullProgram(); - return; - } + GLuint programObject = program ? program->program : 0; + char *name = program ? program->name : "NULL"; if(r_logFile->integer) { // don't just call LogComment, or we will get a call to va() every frame! - GLimp_LogComment(va("--- GL_BindProgram( %s ) ---\n", program->name)); + GLimp_LogComment(va("--- GLSL_BindProgram( %s ) ---\n", name)); } - if(glState.currentProgram != program) - { - qglUseProgramObjectARB(program->program); - glState.currentProgram = program; + if (GL_UseProgramObject(programObject)) backEnd.pc.c_glslShaderBinds++; - } -} - - -void GLSL_BindNullProgram(void) -{ - if(r_logFile->integer) - { - GLimp_LogComment("--- GL_BindNullProgram ---\n"); - } - - if(glState.currentProgram) - { - qglUseProgramObjectARB(0); - glState.currentProgram = NULL; - } } diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 2d7326e3..fc5743be 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -974,8 +974,7 @@ void GL_SetDefaultState( void ) glState.faceCulling = CT_TWO_SIDED; glState.faceCullFront = qtrue; - glState.currentProgram = 0; - qglUseProgramObjectARB(0); + GL_BindNullProgram(); if (glRefConfig.vertexArrayObject) qglBindVertexArrayARB(0); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 2db7eaea..c66171f5 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1360,7 +1360,6 @@ typedef struct { float vertexAttribsInterpolation; qboolean vertexAnimation; uint32_t vertexAttribsEnabled; // global if no VAOs, tess only otherwise - shaderProgram_t *currentProgram; FBO_t *currentFBO; vao_t *currentVao; mat4_t modelview; @@ -2213,7 +2212,6 @@ void GLSL_InitGPUShaders(void); void GLSL_ShutdownGPUShaders(void); void GLSL_VertexAttribPointers(uint32_t attribBits); void GLSL_BindProgram(shaderProgram_t * program); -void GLSL_BindNullProgram(void); void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value); void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value); From 28ff3830612ab6055892887a828719e83391632f Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 20 Jan 2016 06:32:50 -0800 Subject: [PATCH 093/480] OpenGL2: Direct state access, part 3: Framebuffers. --- code/renderercommon/qgl.h | 14 ++ code/renderergl2/tr_dsa.c | 85 +++++++++ code/renderergl2/tr_dsa.h | 17 ++ code/renderergl2/tr_extensions.c | 25 +++ code/renderergl2/tr_fbo.c | 289 ++++++------------------------- code/renderergl2/tr_init.c | 1 + 6 files changed, 192 insertions(+), 239 deletions(-) diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h index 516ff5e3..971684fb 100644 --- a/code/renderercommon/qgl.h +++ b/code/renderercommon/qgl.h @@ -767,6 +767,20 @@ extern GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint locat GLsizei count, GLboolean transpose, const GLfloat *value); +extern GLvoid(APIENTRY * qglNamedRenderbufferStorage)(GLuint renderbuffer, + GLenum internalformat, GLsizei width, GLsizei height); + +extern GLvoid(APIENTRY * qglNamedRenderbufferStorageMultisample)(GLuint renderbuffer, + GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern GLenum(APIENTRY * qglCheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target); +extern GLvoid(APIENTRY * qglNamedFramebufferTexture2D)(GLuint framebuffer, + GLenum attachment, GLenum textarget, GLuint texture, GLint level); +extern GLvoid(APIENTRY * qglNamedFramebufferRenderbuffer)(GLuint framebuffer, + GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + + + #if defined(WIN32) // WGL_ARB_create_context diff --git a/code/renderergl2/tr_dsa.c b/code/renderergl2/tr_dsa.c index 9472bb40..aeb39d78 100644 --- a/code/renderergl2/tr_dsa.c +++ b/code/renderergl2/tr_dsa.c @@ -28,6 +28,10 @@ static struct GLenum texunit; GLuint program; + + GLuint drawFramebuffer; + GLuint readFramebuffer; + GLuint renderbuffer; } glDsaState; @@ -197,3 +201,84 @@ GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location, GL_UseProgramObject(program); qglUniformMatrix4fvARB(location, count, transpose, value); } + +void GL_BindNullFramebuffers() +{ + qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + glDsaState.drawFramebuffer = glDsaState.readFramebuffer = 0; + qglBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); + glDsaState.readFramebuffer = 0; +} + +void GL_BindFramebuffer(GLenum target, GLuint framebuffer) +{ + switch (target) + { + case GL_FRAMEBUFFER_EXT: + if (framebuffer != glDsaState.drawFramebuffer || framebuffer != glDsaState.readFramebuffer) + { + qglBindFramebufferEXT(target, framebuffer); + glDsaState.drawFramebuffer = glDsaState.readFramebuffer = framebuffer; + } + break; + + case GL_DRAW_FRAMEBUFFER_EXT: + if (framebuffer != glDsaState.drawFramebuffer) + { + qglBindFramebufferEXT(target, framebuffer); + glDsaState.drawFramebuffer = framebuffer; + } + break; + + case GL_READ_FRAMEBUFFER_EXT: + if (framebuffer != glDsaState.readFramebuffer) + { + qglBindFramebufferEXT(target, framebuffer); + glDsaState.readFramebuffer = framebuffer; + } + break; + } +} + +void GL_BindRenderbuffer(GLuint renderbuffer) +{ + if (renderbuffer != glDsaState.renderbuffer) + { + qglBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderbuffer); + glDsaState.renderbuffer = renderbuffer; + } +} + +GLvoid APIENTRY GLDSA_NamedRenderbufferStorage(GLuint renderbuffer, + GLenum internalformat, GLsizei width, GLsizei height) +{ + GL_BindRenderbuffer(renderbuffer); + qglRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, internalformat, width, height); +} + +GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisample(GLuint renderbuffer, + GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) +{ + GL_BindRenderbuffer(renderbuffer); + qglRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, internalformat, width, height); +} + +GLenum APIENTRY GLDSA_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target) +{ + GL_BindFramebuffer(target, framebuffer); + return qglCheckFramebufferStatusEXT(target); +} + +GLvoid APIENTRY GLDSA_NamedFramebufferTexture2D(GLuint framebuffer, + GLenum attachment, GLenum textarget, GLuint texture, GLint level) +{ + GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, framebuffer); + qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment, textarget, texture, level); +} + +GLvoid APIENTRY GLDSA_NamedFramebufferRenderbuffer(GLuint framebuffer, + GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) +{ + GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, framebuffer); + qglFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, attachment, renderbuffertarget, renderbuffer); +} diff --git a/code/renderergl2/tr_dsa.h b/code/renderergl2/tr_dsa.h index 164ab065..e820fe00 100644 --- a/code/renderergl2/tr_dsa.h +++ b/code/renderergl2/tr_dsa.h @@ -60,4 +60,21 @@ GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +void GL_BindNullFramebuffers(void); +void GL_BindFramebuffer(GLenum target, GLuint framebuffer); +void GL_BindRenderbuffer(GLuint renderbuffer); + +GLvoid APIENTRY GLDSA_NamedRenderbufferStorage(GLuint renderbuffer, + GLenum internalformat, GLsizei width, GLsizei height); + +GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisample(GLuint renderbuffer, + GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +GLenum APIENTRY GLDSA_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target); +GLvoid APIENTRY GLDSA_NamedFramebufferTexture2D(GLuint framebuffer, + GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLvoid APIENTRY GLDSA_NamedFramebufferRenderbuffer(GLuint framebuffer, + GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + + #endif diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index e5bbd92e..b33968d4 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -216,6 +216,19 @@ GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLvoid(APIENTRY * qglNamedRenderbufferStorage)(GLuint renderbuffer, + GLenum internalformat, GLsizei width, GLsizei height); + +GLvoid(APIENTRY * qglNamedRenderbufferStorageMultisample)(GLuint renderbuffer, + GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +GLenum(APIENTRY * qglCheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target); +GLvoid(APIENTRY * qglNamedFramebufferTexture2D)(GLuint framebuffer, + GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLvoid(APIENTRY * qglNamedFramebufferRenderbuffer)(GLuint framebuffer, + GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + + static qboolean GLimp_HaveExtension(const char *ext) { const char *ptr = Q_stristr( glConfig.extensions_string, ext ); @@ -803,6 +816,12 @@ void GLimp_InitExtraExtensions() qglProgramUniform1fv = GLDSA_ProgramUniform1fv; qglProgramUniformMatrix4fv = GLDSA_ProgramUniformMatrix4fv; + qglNamedRenderbufferStorage = GLDSA_NamedRenderbufferStorage; + qglNamedRenderbufferStorageMultisample = GLDSA_NamedRenderbufferStorageMultisample; + qglCheckNamedFramebufferStatus = GLDSA_CheckNamedFramebufferStatus; + qglNamedFramebufferTexture2D = GLDSA_NamedFramebufferTexture2D; + qglNamedFramebufferRenderbuffer = GLDSA_NamedFramebufferRenderbuffer; + glRefConfig.directStateAccess = qfalse; if (GLimp_HaveExtension(extension)) { @@ -826,6 +845,12 @@ void GLimp_InitExtraExtensions() qglProgramUniform4f = (void *)SDL_GL_GetProcAddress("glProgramUniform4fEXT"); qglProgramUniform1fv = (void *)SDL_GL_GetProcAddress("glProgramUniform1fvEXT"); qglProgramUniformMatrix4fv = (void *)SDL_GL_GetProcAddress("glProgramUniformMatrix4fvEXT"); + + qglNamedRenderbufferStorage = (void *)SDL_GL_GetProcAddress("glNamedRenderbufferStorageEXT"); + qglNamedRenderbufferStorageMultisample = (void *)SDL_GL_GetProcAddress("glNamedRenderbufferStorageMultisampleEXT"); + qglCheckNamedFramebufferStatus = (void *)SDL_GL_GetProcAddress("glCheckNamedFramebufferStatusEXT"); + qglNamedFramebufferTexture2D = (void *)SDL_GL_GetProcAddress("glNamedFramebufferTexture2DEXT"); + qglNamedFramebufferRenderbuffer = (void *)SDL_GL_GetProcAddress("glNamedFramebufferRenderbufferEXT"); } ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess ? 1 : 0], extension); diff --git a/code/renderergl2/tr_fbo.c b/code/renderergl2/tr_fbo.c index c8ea0aeb..6ee533f3 100644 --- a/code/renderergl2/tr_fbo.c +++ b/code/renderergl2/tr_fbo.c @@ -23,6 +23,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // tr_fbo.c #include "tr_local.h" +#include "tr_dsa.h" + /* ============= R_CheckFBO @@ -30,19 +32,10 @@ R_CheckFBO */ qboolean R_CheckFBO(const FBO_t * fbo) { - int code; - int id; - - qglGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &id); - qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo->frameBuffer); - - code = qglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); + GLenum code = qglCheckNamedFramebufferStatus(fbo->frameBuffer, GL_FRAMEBUFFER_EXT); if(code == GL_FRAMEBUFFER_COMPLETE_EXT) - { - qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id); return qtrue; - } // an error occured switch (code) @@ -83,13 +76,9 @@ qboolean R_CheckFBO(const FBO_t * fbo) default: ri.Printf(PRINT_WARNING, "R_CheckFBO: (%s) unknown error 0x%X\n", fbo->name, code); - //ri.Error(ERR_FATAL, "R_CheckFBO: (%s) unknown error 0x%X", fbo->name, code); - //assert(0); break; } - qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id); - return qfalse; } @@ -133,6 +122,11 @@ FBO_t *FBO_Create(const char *name, int width, int height) return fbo; } +/* +================= +FBO_CreateBuffer +================= +*/ void FBO_CreateBuffer(FBO_t *fbo, int format, int index, int multisample) { uint32_t *pRenderBuffer; @@ -189,115 +183,45 @@ void FBO_CreateBuffer(FBO_t *fbo, int format, int index, int multisample) if (absent) qglGenRenderbuffersEXT(1, pRenderBuffer); - qglBindRenderbufferEXT(GL_RENDERBUFFER_EXT, *pRenderBuffer); if (multisample && glRefConfig.framebufferMultisample) - { - qglRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, multisample, format, fbo->width, fbo->height); - } + qglNamedRenderbufferStorageMultisample(*pRenderBuffer, multisample, format, fbo->width, fbo->height); else - { - qglRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, format, fbo->width, fbo->height); - } + qglNamedRenderbufferStorage(*pRenderBuffer, format, fbo->width, fbo->height); if(absent) { if (attachment == 0) { - qglFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer); - qglFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer); + qglNamedFramebufferRenderbuffer(fbo->frameBuffer, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer); + qglNamedFramebufferRenderbuffer(fbo->frameBuffer, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer); } else - qglFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, attachment, GL_RENDERBUFFER_EXT, *pRenderBuffer); + { + qglNamedFramebufferRenderbuffer(fbo->frameBuffer, attachment, GL_RENDERBUFFER_EXT, *pRenderBuffer); + } } } /* ================= -R_AttachFBOTexture1D +FBO_AttachImage ================= */ -void R_AttachFBOTexture1D(int texId, int index) +void FBO_AttachImage(FBO_t *fbo, image_t *image, GLenum attachment) { - if(index < 0 || index >= glRefConfig.maxColorAttachments) - { - ri.Printf(PRINT_WARNING, "R_AttachFBOTexture1D: invalid attachment index %i\n", index); - return; - } + GLenum target = GL_TEXTURE_2D; + int index; - qglFramebufferTexture1DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + index, GL_TEXTURE_1D, texId, 0); + if (image->flags & IMGFLAG_CUBEMAP) + target = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB; + + qglNamedFramebufferTexture2D(fbo->frameBuffer, attachment, target, image->texnum, 0); + index = attachment - GL_COLOR_ATTACHMENT0_EXT; + if (index >= 0 && index <= 15) + fbo->colorImage[index] = image; } -/* -================= -R_AttachFBOTexture2D -================= -*/ -void R_AttachFBOTexture2D(int target, int texId, int index) -{ - if(target != GL_TEXTURE_2D && (target < GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB || target > GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB)) - { - ri.Printf(PRINT_WARNING, "R_AttachFBOTexture2D: invalid target %i\n", target); - return; - } - - if(index < 0 || index >= glRefConfig.maxColorAttachments) - { - ri.Printf(PRINT_WARNING, "R_AttachFBOTexture2D: invalid attachment index %i\n", index); - return; - } - - qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + index, target, texId, 0); -} - -/* -================= -R_AttachFBOTexture3D -================= -*/ -void R_AttachFBOTexture3D(int texId, int index, int zOffset) -{ - if(index < 0 || index >= glRefConfig.maxColorAttachments) - { - ri.Printf(PRINT_WARNING, "R_AttachFBOTexture3D: invalid attachment index %i\n", index); - return; - } - - qglFramebufferTexture3DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT + index, GL_TEXTURE_3D_EXT, texId, 0, zOffset); -} - -/* -================= -R_AttachFBOTextureDepth -================= -*/ -void R_AttachFBOTextureDepth(int texId) -{ - qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, texId, 0); -} - -/* -================= -R_AttachFBOTexturePackedDepthStencil -================= -*/ -void R_AttachFBOTexturePackedDepthStencil(int texId) -{ - qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, texId, 0); - qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_TEXTURE_2D, texId, 0); -} - -void FBO_AttachTextureImage(image_t *img, int index) -{ - if (!glState.currentFBO) - { - ri.Printf(PRINT_WARNING, "FBO: attempted to attach a texture image with no FBO bound!\n"); - return; - } - - R_AttachFBOTexture2D(GL_TEXTURE_2D, img->texnum, index); - glState.currentFBO->colorImage[index] = img; -} /* ============ @@ -312,38 +236,10 @@ void FBO_Bind(FBO_t * fbo) if (r_logFile->integer) { // don't just call LogComment, or we will get a call to va() every frame! - if (fbo) - GLimp_LogComment(va("--- FBO_Bind( %s ) ---\n", fbo->name)); - else - GLimp_LogComment("--- FBO_Bind ( NULL ) ---\n"); + GLimp_LogComment(va("--- FBO_Bind( %s ) ---\n", fbo ? fbo->name : "NULL")); } - if (!fbo) - { - qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); - //qglBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); - glState.currentFBO = NULL; - - return; - } - - qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo->frameBuffer); - - /* - if(fbo->colorBuffers[0]) - { - qglBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fbo->colorBuffers[0]); - } - */ - - /* - if(fbo->depthBuffer) - { - qglBindRenderbufferEXT(GL_RENDERBUFFER_EXT, fbo->depthBuffer); - qglFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, fbo->depthBuffer); - } - */ - + GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, fbo ? fbo->frameBuffer : 0); glState.currentFBO = fbo; } @@ -355,7 +251,6 @@ FBO_Init void FBO_Init(void) { int i; - // int width, height, hdrFormat, multisample; int hdrFormat, multisample; ri.Printf(PRINT_ALL, "------- FBO_Init -------\n"); @@ -369,73 +264,40 @@ void FBO_Init(void) R_IssuePendingRenderCommands(); -/* if(glRefConfig.textureNonPowerOfTwo) - { - width = glConfig.vidWidth; - height = glConfig.vidHeight; - } - else - { - width = NextPowerOfTwo(glConfig.vidWidth); - height = NextPowerOfTwo(glConfig.vidHeight); - } */ - hdrFormat = GL_RGBA8; if (r_hdr->integer && glRefConfig.framebufferObject && glRefConfig.textureFloat) - { hdrFormat = GL_RGBA16F_ARB; - } qglGetIntegerv(GL_MAX_SAMPLES_EXT, &multisample); if (r_ext_framebuffer_multisample->integer < multisample) - { multisample = r_ext_framebuffer_multisample->integer; - } if (multisample < 2 || !glRefConfig.framebufferBlit) multisample = 0; if (multisample != r_ext_framebuffer_multisample->integer) - { ri.Cvar_SetValue("r_ext_framebuffer_multisample", (float)multisample); - } // only create a render FBO if we need to resolve MSAA or do HDR // otherwise just render straight to the screen (tr.renderFbo = NULL) if (multisample && glRefConfig.framebufferMultisample) { tr.renderFbo = FBO_Create("_render", tr.renderDepthImage->width, tr.renderDepthImage->height); - FBO_Bind(tr.renderFbo); - FBO_CreateBuffer(tr.renderFbo, hdrFormat, 0, multisample); FBO_CreateBuffer(tr.renderFbo, GL_DEPTH_COMPONENT24_ARB, 0, multisample); - R_CheckFBO(tr.renderFbo); - tr.msaaResolveFbo = FBO_Create("_msaaResolve", tr.renderDepthImage->width, tr.renderDepthImage->height); - FBO_Bind(tr.msaaResolveFbo); - - //FBO_CreateBuffer(tr.msaaResolveFbo, hdrFormat, 0, 0); - FBO_AttachTextureImage(tr.renderImage, 0); - - //FBO_CreateBuffer(tr.msaaResolveFbo, GL_DEPTH_COMPONENT24_ARB, 0, 0); - R_AttachFBOTextureDepth(tr.renderDepthImage->texnum); - + FBO_AttachImage(tr.msaaResolveFbo, tr.renderImage, GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.msaaResolveFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT); R_CheckFBO(tr.msaaResolveFbo); } else if (r_hdr->integer) { tr.renderFbo = FBO_Create("_render", tr.renderDepthImage->width, tr.renderDepthImage->height); - FBO_Bind(tr.renderFbo); - - //FBO_CreateBuffer(tr.renderFbo, hdrFormat, 0, 0); - FBO_AttachTextureImage(tr.renderImage, 0); - - //FBO_CreateBuffer(tr.renderFbo, GL_DEPTH_COMPONENT24_ARB, 0, 0); - R_AttachFBOTextureDepth(tr.renderDepthImage->texnum); - + FBO_AttachImage(tr.renderFbo, tr.renderImage, GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.renderFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT); R_CheckFBO(tr.renderFbo); } @@ -443,20 +305,15 @@ void FBO_Init(void) // this fixes the corrupt screen bug with r_hdr 1 on older hardware if (tr.renderFbo) { - FBO_Bind(tr.renderFbo); + GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, tr.renderFbo->frameBuffer); qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); - FBO_Bind(NULL); } if (r_drawSunRays->integer) { tr.sunRaysFbo = FBO_Create("_sunRays", tr.renderDepthImage->width, tr.renderDepthImage->height); - FBO_Bind(tr.sunRaysFbo); - - FBO_AttachTextureImage(tr.sunRaysImage, 0); - - R_AttachFBOTextureDepth(tr.renderDepthImage->texnum); - + FBO_AttachImage(tr.sunRaysFbo, tr.sunRaysImage, GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.sunRaysFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT); R_CheckFBO(tr.sunRaysFbo); } @@ -466,14 +323,8 @@ void FBO_Init(void) for( i = 0; i < MAX_DRAWN_PSHADOWS; i++) { tr.pshadowFbos[i] = FBO_Create(va("_shadowmap%d", i), tr.pshadowMaps[i]->width, tr.pshadowMaps[i]->height); - FBO_Bind(tr.pshadowFbos[i]); - - //FBO_CreateBuffer(tr.pshadowFbos[i], GL_RGBA8, 0, 0); - FBO_AttachTextureImage(tr.pshadowMaps[i], 0); - + FBO_AttachImage(tr.pshadowFbos[i], tr.pshadowMaps[i], GL_COLOR_ATTACHMENT0_EXT); FBO_CreateBuffer(tr.pshadowFbos[i], GL_DEPTH_COMPONENT24_ARB, 0, 0); - //R_AttachFBOTextureDepth(tr.textureDepthImage->texnum); - R_CheckFBO(tr.pshadowFbos[i]); } } @@ -483,104 +334,64 @@ void FBO_Init(void) for ( i = 0; i < 4; i++) { tr.sunShadowFbo[i] = FBO_Create("_sunshadowmap", tr.sunShadowDepthImage[i]->width, tr.sunShadowDepthImage[i]->height); - FBO_Bind(tr.sunShadowFbo[i]); - - //FBO_CreateBuffer(tr.sunShadowFbo[i], GL_RGBA8, 0, 0); - //FBO_AttachTextureImage(tr.sunShadowImage, 0); - qglDrawBuffer(GL_NONE); - qglReadBuffer(GL_NONE); - - //FBO_CreateBuffer(tr.sunShadowFbo, GL_DEPTH_COMPONENT24_ARB, 0, 0); - R_AttachFBOTextureDepth(tr.sunShadowDepthImage[i]->texnum); - + FBO_AttachImage(tr.sunShadowFbo[i], tr.sunShadowDepthImage[i], GL_DEPTH_ATTACHMENT_EXT); R_CheckFBO(tr.sunShadowFbo[i]); - } tr.screenShadowFbo = FBO_Create("_screenshadow", tr.screenShadowImage->width, tr.screenShadowImage->height); - FBO_Bind(tr.screenShadowFbo); - - FBO_AttachTextureImage(tr.screenShadowImage, 0); - + FBO_AttachImage(tr.screenShadowFbo, tr.screenShadowImage, GL_COLOR_ATTACHMENT0_EXT); R_CheckFBO(tr.screenShadowFbo); } for (i = 0; i < 2; i++) { tr.textureScratchFbo[i] = FBO_Create(va("_texturescratch%d", i), tr.textureScratchImage[i]->width, tr.textureScratchImage[i]->height); - FBO_Bind(tr.textureScratchFbo[i]); - - //FBO_CreateBuffer(tr.textureScratchFbo[i], GL_RGBA8, 0, 0); - FBO_AttachTextureImage(tr.textureScratchImage[i], 0); - + FBO_AttachImage(tr.textureScratchFbo[i], tr.textureScratchImage[i], GL_COLOR_ATTACHMENT0_EXT); R_CheckFBO(tr.textureScratchFbo[i]); } { tr.calcLevelsFbo = FBO_Create("_calclevels", tr.calcLevelsImage->width, tr.calcLevelsImage->height); - FBO_Bind(tr.calcLevelsFbo); - - //FBO_CreateBuffer(tr.calcLevelsFbo, hdrFormat, 0, 0); - FBO_AttachTextureImage(tr.calcLevelsImage, 0); - + FBO_AttachImage(tr.calcLevelsFbo, tr.calcLevelsImage, GL_COLOR_ATTACHMENT0_EXT); R_CheckFBO(tr.calcLevelsFbo); } { tr.targetLevelsFbo = FBO_Create("_targetlevels", tr.targetLevelsImage->width, tr.targetLevelsImage->height); - FBO_Bind(tr.targetLevelsFbo); - - //FBO_CreateBuffer(tr.targetLevelsFbo, hdrFormat, 0, 0); - FBO_AttachTextureImage(tr.targetLevelsImage, 0); - + FBO_AttachImage(tr.targetLevelsFbo, tr.targetLevelsImage, GL_COLOR_ATTACHMENT0_EXT); R_CheckFBO(tr.targetLevelsFbo); } for (i = 0; i < 2; i++) { tr.quarterFbo[i] = FBO_Create(va("_quarter%d", i), tr.quarterImage[i]->width, tr.quarterImage[i]->height); - FBO_Bind(tr.quarterFbo[i]); - - //FBO_CreateBuffer(tr.quarterFbo[i], hdrFormat, 0, 0); - FBO_AttachTextureImage(tr.quarterImage[i], 0); - + FBO_AttachImage(tr.quarterFbo[i], tr.quarterImage[i], GL_COLOR_ATTACHMENT0_EXT); R_CheckFBO(tr.quarterFbo[i]); } if (r_ssao->integer) { tr.hdrDepthFbo = FBO_Create("_hdrDepth", tr.hdrDepthImage->width, tr.hdrDepthImage->height); - FBO_Bind(tr.hdrDepthFbo); - - FBO_AttachTextureImage(tr.hdrDepthImage, 0); - + FBO_AttachImage(tr.hdrDepthFbo, tr.hdrDepthImage, GL_COLOR_ATTACHMENT0_EXT); R_CheckFBO(tr.hdrDepthFbo); tr.screenSsaoFbo = FBO_Create("_screenssao", tr.screenSsaoImage->width, tr.screenSsaoImage->height); - FBO_Bind(tr.screenSsaoFbo); - - FBO_AttachTextureImage(tr.screenSsaoImage, 0); - + FBO_AttachImage(tr.screenSsaoFbo, tr.screenSsaoImage, GL_COLOR_ATTACHMENT0_EXT); R_CheckFBO(tr.screenSsaoFbo); } if (tr.renderCubeImage) { tr.renderCubeFbo = FBO_Create("_renderCubeFbo", tr.renderCubeImage->width, tr.renderCubeImage->height); - FBO_Bind(tr.renderCubeFbo); - - //FBO_AttachTextureImage(tr.renderCubeImage, 0); - R_AttachFBOTexture2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, tr.renderCubeImage->texnum, 0); - glState.currentFBO->colorImage[0] = tr.renderCubeImage; - + FBO_AttachImage(tr.renderCubeFbo, tr.renderCubeImage, GL_COLOR_ATTACHMENT0_EXT); FBO_CreateBuffer(tr.renderCubeFbo, GL_DEPTH_COMPONENT24_ARB, 0, 0); - R_CheckFBO(tr.renderCubeFbo); } GL_CheckErrors(); - FBO_Bind(NULL); + GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, 0); + glState.currentFBO = NULL; } /* @@ -849,12 +660,12 @@ void FBO_FastBlit(FBO_t *src, ivec4_t srcBox, FBO_t *dst, ivec4_t dstBox, int bu VectorSet4(dstBoxFinal, dstBox[0], dstBox[1], dstBox[0] + dstBox[2], dstBox[1] + dstBox[3]); } - qglBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, srcFb); - qglBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, dstFb); + GL_BindFramebuffer(GL_READ_FRAMEBUFFER_EXT, srcFb); + GL_BindFramebuffer(GL_DRAW_FRAMEBUFFER_EXT, dstFb); qglBlitFramebufferEXT(srcBoxFinal[0], srcBoxFinal[1], srcBoxFinal[2], srcBoxFinal[3], dstBoxFinal[0], dstBoxFinal[1], dstBoxFinal[2], dstBoxFinal[3], buffers, filter); - qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, 0); glState.currentFBO = NULL; } diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index fc5743be..3f387232 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -959,6 +959,7 @@ void GL_SetDefaultState( void ) qglColor4f (1,1,1,1); GL_BindNullTextures(); + GL_BindNullFramebuffers(); qglEnable(GL_TEXTURE_2D); GL_TextureMode( r_textureMode->string ); From 558da2527725fff521bbd3a6d341c606d395d92a Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 21 Jan 2016 22:31:41 -0800 Subject: [PATCH 094/480] OpenGL2: Some FBO related cleanup/fixes. --- code/renderergl2/tr_backend.c | 54 ++++----------- code/renderergl2/tr_fbo.c | 39 ++++++----- code/renderergl2/tr_fbo.h | 1 + code/renderergl2/tr_postprocess.c | 109 ++++++++++++------------------ 4 files changed, 80 insertions(+), 123 deletions(-) diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index f3f5a6af..df70144e 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -20,6 +20,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ #include "tr_local.h" +#include "tr_fbo.h" #include "tr_dsa.h" backEndData_t *backEndData; @@ -377,31 +378,20 @@ void RB_BeginDrawingView (void) { if (glRefConfig.framebufferObject) { + FBO_t *fbo = backEnd.viewParms.targetFbo; + // FIXME: HUGE HACK: render to the screen fbo if we've already postprocessed the frame and aren't drawing more world // drawing more world check is in case of double renders, such as skyportals - if (backEnd.viewParms.targetFbo == NULL) - { - if (!tr.renderFbo || (backEnd.framePostProcessed && (backEnd.refdef.rdflags & RDF_NOWORLDMODEL))) - { - FBO_Bind(NULL); - } - else - { - FBO_Bind(tr.renderFbo); - } - } - else - { - FBO_Bind(backEnd.viewParms.targetFbo); + if (fbo == NULL && !(backEnd.framePostProcessed && (backEnd.refdef.rdflags & RDF_NOWORLDMODEL))) + fbo = tr.renderFbo; - // FIXME: hack for cubemap testing - if (tr.renderCubeFbo && backEnd.viewParms.targetFbo == tr.renderCubeFbo) - { - cubemap_t *cubemap = &tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex]; - //qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + backEnd.viewParms.targetFboLayer, backEnd.viewParms.targetFbo->colorImage[0]->texnum, 0); - qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + backEnd.viewParms.targetFboLayer, cubemap->image->texnum, 0); - } + if (tr.renderCubeFbo && fbo == tr.renderCubeFbo) + { + cubemap_t *cubemap = &tr.cubemaps[backEnd.viewParms.targetFboCubemapIndex]; + FBO_AttachImage(fbo, cubemap->image, GL_COLOR_ATTACHMENT0_EXT, backEnd.viewParms.targetFboLayer); } + + FBO_Bind(fbo); } // @@ -780,14 +770,7 @@ void RE_StretchRaw (int x, int y, int w, int h, int cols, int rows, const byte * // FIXME: HUGE hack if (glRefConfig.framebufferObject) { - if (!tr.renderFbo || backEnd.framePostProcessed) - { - FBO_Bind(NULL); - } - else - { - FBO_Bind(tr.renderFbo); - } + FBO_Bind(backEnd.framePostProcessed ? NULL : tr.renderFbo); } RB_SetGL2D(); @@ -873,16 +856,7 @@ const void *RB_StretchPic ( const void *data ) { // FIXME: HUGE hack if (glRefConfig.framebufferObject) - { - if (!tr.renderFbo || backEnd.framePostProcessed) - { - FBO_Bind(NULL); - } - else - { - FBO_Bind(tr.renderFbo); - } - } + FBO_Bind(backEnd.framePostProcessed ? NULL : tr.renderFbo); RB_SetGL2D(); @@ -1695,7 +1669,7 @@ const void *RB_ExportCubemaps(const void *data) for (j = 0; j < 6; j++) { - qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X + j, cubemap->image->texnum, 0); + FBO_AttachImage(tr.renderCubeFbo, cubemap->image, GL_COLOR_ATTACHMENT0_EXT, j); qglReadPixels(0, 0, r_cubemapSize->integer, r_cubemapSize->integer, GL_RGBA, GL_UNSIGNED_BYTE, p); p += sideSize; } diff --git a/code/renderergl2/tr_fbo.c b/code/renderergl2/tr_fbo.c index 6ee533f3..59b17032 100644 --- a/code/renderergl2/tr_fbo.c +++ b/code/renderergl2/tr_fbo.c @@ -208,13 +208,13 @@ void FBO_CreateBuffer(FBO_t *fbo, int format, int index, int multisample) FBO_AttachImage ================= */ -void FBO_AttachImage(FBO_t *fbo, image_t *image, GLenum attachment) +void FBO_AttachImage(FBO_t *fbo, image_t *image, GLenum attachment, GLuint cubemapside) { GLenum target = GL_TEXTURE_2D; int index; if (image->flags & IMGFLAG_CUBEMAP) - target = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB; + target = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + cubemapside; qglNamedFramebufferTexture2D(fbo->frameBuffer, attachment, target, image->texnum, 0); index = attachment - GL_COLOR_ATTACHMENT0_EXT; @@ -289,15 +289,15 @@ void FBO_Init(void) R_CheckFBO(tr.renderFbo); tr.msaaResolveFbo = FBO_Create("_msaaResolve", tr.renderDepthImage->width, tr.renderDepthImage->height); - FBO_AttachImage(tr.msaaResolveFbo, tr.renderImage, GL_COLOR_ATTACHMENT0_EXT); - FBO_AttachImage(tr.msaaResolveFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT); + FBO_AttachImage(tr.msaaResolveFbo, tr.renderImage, GL_COLOR_ATTACHMENT0_EXT, 0); + FBO_AttachImage(tr.msaaResolveFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT, 0); R_CheckFBO(tr.msaaResolveFbo); } else if (r_hdr->integer) { tr.renderFbo = FBO_Create("_render", tr.renderDepthImage->width, tr.renderDepthImage->height); - FBO_AttachImage(tr.renderFbo, tr.renderImage, GL_COLOR_ATTACHMENT0_EXT); - FBO_AttachImage(tr.renderFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT); + FBO_AttachImage(tr.renderFbo, tr.renderImage, GL_COLOR_ATTACHMENT0_EXT, 0); + FBO_AttachImage(tr.renderFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT, 0); R_CheckFBO(tr.renderFbo); } @@ -312,8 +312,8 @@ void FBO_Init(void) if (r_drawSunRays->integer) { tr.sunRaysFbo = FBO_Create("_sunRays", tr.renderDepthImage->width, tr.renderDepthImage->height); - FBO_AttachImage(tr.sunRaysFbo, tr.sunRaysImage, GL_COLOR_ATTACHMENT0_EXT); - FBO_AttachImage(tr.sunRaysFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT); + FBO_AttachImage(tr.sunRaysFbo, tr.sunRaysImage, GL_COLOR_ATTACHMENT0_EXT, 0); + FBO_AttachImage(tr.sunRaysFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT, 0); R_CheckFBO(tr.sunRaysFbo); } @@ -323,7 +323,7 @@ void FBO_Init(void) for( i = 0; i < MAX_DRAWN_PSHADOWS; i++) { tr.pshadowFbos[i] = FBO_Create(va("_shadowmap%d", i), tr.pshadowMaps[i]->width, tr.pshadowMaps[i]->height); - FBO_AttachImage(tr.pshadowFbos[i], tr.pshadowMaps[i], GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.pshadowFbos[i], tr.pshadowMaps[i], GL_COLOR_ATTACHMENT0_EXT, 0); FBO_CreateBuffer(tr.pshadowFbos[i], GL_DEPTH_COMPONENT24_ARB, 0, 0); R_CheckFBO(tr.pshadowFbos[i]); } @@ -334,56 +334,56 @@ void FBO_Init(void) for ( i = 0; i < 4; i++) { tr.sunShadowFbo[i] = FBO_Create("_sunshadowmap", tr.sunShadowDepthImage[i]->width, tr.sunShadowDepthImage[i]->height); - FBO_AttachImage(tr.sunShadowFbo[i], tr.sunShadowDepthImage[i], GL_DEPTH_ATTACHMENT_EXT); + FBO_AttachImage(tr.sunShadowFbo[i], tr.sunShadowDepthImage[i], GL_DEPTH_ATTACHMENT_EXT, 0); R_CheckFBO(tr.sunShadowFbo[i]); } tr.screenShadowFbo = FBO_Create("_screenshadow", tr.screenShadowImage->width, tr.screenShadowImage->height); - FBO_AttachImage(tr.screenShadowFbo, tr.screenShadowImage, GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.screenShadowFbo, tr.screenShadowImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.screenShadowFbo); } for (i = 0; i < 2; i++) { tr.textureScratchFbo[i] = FBO_Create(va("_texturescratch%d", i), tr.textureScratchImage[i]->width, tr.textureScratchImage[i]->height); - FBO_AttachImage(tr.textureScratchFbo[i], tr.textureScratchImage[i], GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.textureScratchFbo[i], tr.textureScratchImage[i], GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.textureScratchFbo[i]); } { tr.calcLevelsFbo = FBO_Create("_calclevels", tr.calcLevelsImage->width, tr.calcLevelsImage->height); - FBO_AttachImage(tr.calcLevelsFbo, tr.calcLevelsImage, GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.calcLevelsFbo, tr.calcLevelsImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.calcLevelsFbo); } { tr.targetLevelsFbo = FBO_Create("_targetlevels", tr.targetLevelsImage->width, tr.targetLevelsImage->height); - FBO_AttachImage(tr.targetLevelsFbo, tr.targetLevelsImage, GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.targetLevelsFbo, tr.targetLevelsImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.targetLevelsFbo); } for (i = 0; i < 2; i++) { tr.quarterFbo[i] = FBO_Create(va("_quarter%d", i), tr.quarterImage[i]->width, tr.quarterImage[i]->height); - FBO_AttachImage(tr.quarterFbo[i], tr.quarterImage[i], GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.quarterFbo[i], tr.quarterImage[i], GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.quarterFbo[i]); } if (r_ssao->integer) { tr.hdrDepthFbo = FBO_Create("_hdrDepth", tr.hdrDepthImage->width, tr.hdrDepthImage->height); - FBO_AttachImage(tr.hdrDepthFbo, tr.hdrDepthImage, GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.hdrDepthFbo, tr.hdrDepthImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.hdrDepthFbo); tr.screenSsaoFbo = FBO_Create("_screenssao", tr.screenSsaoImage->width, tr.screenSsaoImage->height); - FBO_AttachImage(tr.screenSsaoFbo, tr.screenSsaoImage, GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.screenSsaoFbo, tr.screenSsaoImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.screenSsaoFbo); } if (tr.renderCubeImage) { tr.renderCubeFbo = FBO_Create("_renderCubeFbo", tr.renderCubeImage->width, tr.renderCubeImage->height); - FBO_AttachImage(tr.renderCubeFbo, tr.renderCubeImage, GL_COLOR_ATTACHMENT0_EXT); + FBO_AttachImage(tr.renderCubeFbo, tr.renderCubeImage, GL_COLOR_ATTACHMENT0_EXT, 0); FBO_CreateBuffer(tr.renderCubeFbo, GL_DEPTH_COMPONENT24_ARB, 0, 0); R_CheckFBO(tr.renderCubeFbo); } @@ -474,7 +474,10 @@ void FBO_BlitFromTexture(struct image_s *src, ivec4_t inSrcBox, vec2_t inSrcTexS int width, height; if (!src) + { + ri.Printf(PRINT_WARNING, "Tried to blit from a NULL texture!\n"); return; + } if (inSrcBox) { diff --git a/code/renderergl2/tr_fbo.h b/code/renderergl2/tr_fbo.h index b5ab18c1..3f23a353 100644 --- a/code/renderergl2/tr_fbo.h +++ b/code/renderergl2/tr_fbo.h @@ -52,6 +52,7 @@ typedef struct FBO_s int height; } FBO_t; +void FBO_AttachImage(FBO_t *fbo, image_t *image, GLenum attachment, GLuint cubemapside); void FBO_Bind(FBO_t *fbo); void FBO_Init(void); void FBO_Shutdown(void); diff --git a/code/renderergl2/tr_postprocess.c b/code/renderergl2/tr_postprocess.c index 35982fce..1952ae96 100644 --- a/code/renderergl2/tr_postprocess.c +++ b/code/renderergl2/tr_postprocess.c @@ -183,7 +183,7 @@ void RB_BokehBlur(FBO_t *src, ivec4_t srcBox, FBO_t *dst, ivec4_t dstBox, float FBO_Blit(tr.textureScratchFbo[0], NULL, blurTexScale, tr.textureScratchFbo[1], NULL, &tr.bokehShader, color, 0); } - FBO_Blit(tr.textureScratchFbo[1], NULL, NULL, dst, dstBox, &tr.textureColorShader, NULL, 0); + FBO_Blit(tr.textureScratchFbo[1], NULL, NULL, dst, dstBox, NULL, NULL, 0); } #else // higher quality blur, but slower else if (blur > 1.0f) @@ -217,7 +217,7 @@ void RB_BokehBlur(FBO_t *src, ivec4_t srcBox, FBO_t *dst, ivec4_t dstBox, float FBO_Blit(tr.quarterFbo[0], NULL, blurTexScale, tr.quarterFbo[1], NULL, &tr.bokehShader, color, GLS_SRCBLEND_SRC_ALPHA | GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA); } - FBO_Blit(tr.quarterFbo[1], NULL, NULL, dst, dstBox, &tr.textureColorShader, NULL, 0); + FBO_Blit(tr.quarterFbo[1], NULL, NULL, dst, dstBox, NULL, NULL, 0); } #endif } @@ -232,49 +232,44 @@ static void RB_RadialBlur(FBO_t *srcFbo, FBO_t *dstFbo, int passes, float stretc const float mul = powf(stretch, inc); float scale; - { - vec2_t texScale; - - texScale[0] = - texScale[1] = 1.0f; - - alpha *= inc; - VectorSet4(color, alpha, alpha, alpha, 1.0f); + alpha *= inc; + VectorSet4(color, alpha, alpha, alpha, 1.0f); + if (srcFbo) VectorSet4(srcBox, 0, 0, srcFbo->width, srcFbo->height); - VectorSet4(dstBox, x, y, w, h); - FBO_Blit(srcFbo, srcBox, texScale, dstFbo, dstBox, &tr.textureColorShader, color, 0); + else + VectorSet4(srcBox, 0, 0, glConfig.vidWidth, glConfig.vidHeight); - --passes; - scale = mul; - while (passes > 0) + VectorSet4(dstBox, x, y, w, h); + FBO_Blit(srcFbo, srcBox, NULL, dstFbo, dstBox, NULL, color, 0); + + --passes; + scale = mul; + while (passes > 0) + { + float iscale = 1.f / scale; + float s0 = xcenter * (1.f - iscale); + float t0 = (1.0f - ycenter) * (1.f - iscale); + + if (srcFbo) { - float iscale = 1.f / scale; - float s0 = xcenter * (1.f - iscale); - float t0 = (1.0f - ycenter) * (1.f - iscale); - float s1 = iscale + s0; - float t1 = iscale + t0; - - if (srcFbo) - { - srcBox[0] = s0 * srcFbo->width; - srcBox[1] = t0 * srcFbo->height; - srcBox[2] = (s1 - s0) * srcFbo->width; - srcBox[3] = (t1 - t0) * srcFbo->height; - } - else - { - srcBox[0] = s0 * glConfig.vidWidth; - srcBox[1] = t0 * glConfig.vidHeight; - srcBox[2] = (s1 - s0) * glConfig.vidWidth; - srcBox[3] = (t1 - t0) * glConfig.vidHeight; - } - - FBO_Blit(srcFbo, srcBox, texScale, dstFbo, dstBox, &tr.textureColorShader, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); - - scale *= mul; - --passes; + srcBox[0] = s0 * srcFbo->width; + srcBox[1] = t0 * srcFbo->height; + srcBox[2] = iscale * srcFbo->width; + srcBox[3] = iscale * srcFbo->height; } + else + { + srcBox[0] = s0 * glConfig.vidWidth; + srcBox[1] = t0 * glConfig.vidHeight; + srcBox[2] = iscale * glConfig.vidWidth; + srcBox[3] = iscale * glConfig.vidHeight; + } + + FBO_Blit(srcFbo, srcBox, NULL, dstFbo, dstBox, NULL, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); + + scale *= mul; + --passes; } } @@ -329,7 +324,7 @@ void RB_SunRays(FBO_t *srcFbo, ivec4_t srcBox, FBO_t *dstFbo, ivec4_t dstBox) // From RB_DrawSun() { float dist; - mat4_t trans, model, mvp; + mat4_t trans, model; Mat4Translation( backEnd.viewParms.or.origin, trans ); Mat4Multiply( backEnd.viewParms.world.modelMatrix, trans, model ); @@ -353,12 +348,8 @@ void RB_SunRays(FBO_t *srcFbo, ivec4_t srcBox, FBO_t *dstFbo, ivec4_t dstBox) // initialize quarter buffers { float mul = 1.f; - vec2_t texScale; ivec4_t rayBox, quarterBox; - texScale[0] = - texScale[1] = 1.0f; - VectorSet4(color, mul, mul, mul, 1); if (srcFbo) @@ -408,14 +399,10 @@ void RB_SunRays(FBO_t *srcFbo, ivec4_t srcBox, FBO_t *dstFbo, ivec4_t dstBox) // add result back on top of the main buffer { float mul = 1.f; - vec2_t texScale; - - texScale[0] = - texScale[1] = 1.0f; VectorSet4(color, mul, mul, mul, 1); - FBO_Blit(tr.quarterFbo[0], NULL, texScale, dstFbo, dstBox, &tr.textureColorShader, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE); + FBO_Blit(tr.quarterFbo[0], NULL, NULL, dstFbo, dstBox, NULL, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE); } } @@ -443,31 +430,27 @@ static void RB_BlurAxis(FBO_t *srcFbo, FBO_t *dstFbo, float strength, qboolean h { ivec4_t srcBox, dstBox; vec4_t color; - vec2_t texScale; - - texScale[0] = - texScale[1] = 1.0f; VectorSet4(color, weights[0], weights[0], weights[0], 1.0f); VectorSet4(srcBox, 0, 0, srcFbo->width, srcFbo->height); VectorSet4(dstBox, 0, 0, dstFbo->width, dstFbo->height); - FBO_Blit(srcFbo, srcBox, texScale, dstFbo, dstBox, &tr.textureColorShader, color, 0 ); + FBO_Blit(srcFbo, srcBox, NULL, dstFbo, dstBox, NULL, color, 0); VectorSet4(color, weights[1], weights[1], weights[1], 1.0f); dx = offsets[1] * xmul; dy = offsets[1] * ymul; VectorSet4(srcBox, dx, dy, srcFbo->width, srcFbo->height); - FBO_Blit(srcFbo, srcBox, texScale, dstFbo, dstBox, &tr.textureColorShader, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); + FBO_Blit(srcFbo, srcBox, NULL, dstFbo, dstBox, NULL, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE); VectorSet4(srcBox, -dx, -dy, srcFbo->width, srcFbo->height); - FBO_Blit(srcFbo, srcBox, texScale, dstFbo, dstBox, &tr.textureColorShader, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); + FBO_Blit(srcFbo, srcBox, NULL, dstFbo, dstBox, NULL, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE); VectorSet4(color, weights[2], weights[2], weights[2], 1.0f); dx = offsets[2] * xmul; dy = offsets[2] * ymul; VectorSet4(srcBox, dx, dy, srcFbo->width, srcFbo->height); - FBO_Blit(srcFbo, srcBox, texScale, dstFbo, dstBox, &tr.textureColorShader, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); + FBO_Blit(srcFbo, srcBox, NULL, dstFbo, dstBox, NULL, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE); VectorSet4(srcBox, -dx, -dy, srcFbo->width, srcFbo->height); - FBO_Blit(srcFbo, srcBox, texScale, dstFbo, dstBox, &tr.textureColorShader, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); + FBO_Blit(srcFbo, srcBox, NULL, dstFbo, dstBox, NULL, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE); } } @@ -492,10 +475,6 @@ void RB_GaussianBlur(float blur) { ivec4_t srcBox, dstBox; vec4_t color; - vec2_t texScale; - - texScale[0] = - texScale[1] = 1.0f; VectorSet4(color, 1, 1, 1, 1); @@ -507,7 +486,7 @@ void RB_GaussianBlur(float blur) VectorSet4(srcBox, 0, 0, tr.whiteImage->width, tr.whiteImage->height); VectorSet4(dstBox, 0, 0, tr.textureScratchFbo[0]->width, tr.textureScratchFbo[0]->height); qglColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); - FBO_BlitFromTexture(tr.whiteImage, srcBox, texScale, tr.textureScratchFbo[0], dstBox, &tr.textureColorShader, color, GLS_DEPTHTEST_DISABLE); + FBO_BlitFromTexture(tr.whiteImage, srcBox, NULL, tr.textureScratchFbo[0], dstBox, NULL, color, GLS_DEPTHTEST_DISABLE); qglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); // blur the tiny buffer horizontally and vertically @@ -518,6 +497,6 @@ void RB_GaussianBlur(float blur) VectorSet4(srcBox, 0, 0, tr.textureScratchFbo[0]->width, tr.textureScratchFbo[0]->height); VectorSet4(dstBox, 0, 0, glConfig.vidWidth, glConfig.vidHeight); color[3] = factor; - FBO_Blit(tr.textureScratchFbo[0], srcBox, texScale, NULL, dstBox, &tr.textureColorShader, color, GLS_SRCBLEND_SRC_ALPHA | GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA); + FBO_Blit(tr.textureScratchFbo[0], srcBox, NULL, NULL, dstBox, NULL, color, GLS_SRCBLEND_SRC_ALPHA | GLS_DSTBLEND_ONE_MINUS_SRC_ALPHA); } } From 2b2f1aeaa12097c731c2fa1de08c2f366872ba23 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 28 Jan 2016 16:39:42 -0800 Subject: [PATCH 095/480] OpenGL2: Load existing per-map cubemaps. --- code/renderergl2/tr_bsp.c | 45 +++-- code/renderergl2/tr_dsa.c | 3 + code/renderergl2/tr_image.c | 335 +++++++++++++++++++----------------- 3 files changed, 208 insertions(+), 175 deletions(-) diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index d73242b8..6c4cbe21 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -3068,23 +3068,41 @@ void R_AssignCubemapsToWorldSurfaces(void) } -void R_RenderAllCubemaps(void) +void R_LoadCubemaps(void) +{ + int i; + imgFlags_t flags = IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_NOLIGHTSCALE | IMGFLAG_CUBEMAP; + + for (i = 0; i < tr.numCubemaps; i++) + { + char filename[MAX_QPATH]; + cubemap_t *cubemap = &tr.cubemaps[i]; + + Com_sprintf(filename, MAX_QPATH, "cubemaps/%s/%03d.dds", tr.world->baseName, i); + + cubemap->image = R_FindImageFile(filename, IMGTYPE_COLORALPHA, flags); + } +} + + +void R_RenderMissingCubemaps(void) { int i, j; + imgFlags_t flags = IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_NOLIGHTSCALE | IMGFLAG_CUBEMAP; for (i = 0; i < tr.numCubemaps; i++) { - tr.cubemaps[i].image = R_CreateImage(va("*cubeMap%d", i), NULL, r_cubemapSize->integer, r_cubemapSize->integer, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE | IMGFLAG_MIPMAP | IMGFLAG_CUBEMAP, GL_RGBA8); - } - - for (i = 0; i < tr.numCubemaps; i++) - { - for (j = 0; j < 6; j++) + if (!tr.cubemaps[i].image) { - RE_ClearScene(); - R_RenderCubemapSide(i, j, qfalse); - R_IssuePendingRenderCommands(); - R_InitNextFrame(); + tr.cubemaps[i].image = R_CreateImage(va("*cubeMap%d", i), NULL, r_cubemapSize->integer, r_cubemapSize->integer, IMGTYPE_COLORALPHA, flags, GL_RGBA8); + + for (j = 0; j < 6; j++) + { + RE_ClearScene(); + R_RenderCubemapSide(i, j, qfalse); + R_IssuePendingRenderCommands(); + R_InitNextFrame(); + } } } } @@ -3425,10 +3443,11 @@ void RE_LoadWorldMap( const char *name ) { // make sure the VAO glState entry is safe R_BindNullVao(); - // Render all cubemaps + // Render or load all cubemaps if (r_cubeMapping->integer && tr.numCubemaps) { - R_RenderAllCubemaps(); + R_LoadCubemaps(); + R_RenderMissingCubemaps(); } ri.FS_FreeFile( buffer.v ); diff --git a/code/renderergl2/tr_dsa.c b/code/renderergl2/tr_dsa.c index aeb39d78..a766263a 100644 --- a/code/renderergl2/tr_dsa.c +++ b/code/renderergl2/tr_dsa.c @@ -68,6 +68,9 @@ int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) if (glDsaState.textures[tmu] == texture) return 0; + if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) + target = GL_TEXTURE_CUBE_MAP; + qglBindMultiTexture(texunit, target, texture); glDsaState.textures[tmu] = texture; return 1; diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index 7d53d463..e508b15d 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -1863,82 +1863,57 @@ static void RawImage_UploadToRgtc2Texture(GLuint texture, byte *data, int width, ri.Hunk_FreeTempMemory(compressedData); } +static int CalculateMipSize(int width, int height, GLenum picFormat) +{ + int numBlocks = ((width + 3) / 4) * ((height + 3) / 4); + int numPixels = width * height; -static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int width, int height, GLenum picFormat, int numMips, GLenum internalFormat, imgType_t type, imgFlags_t flags, qboolean subtexture ) + switch (picFormat) + { + case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: + case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: + case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: + case GL_COMPRESSED_RED_RGTC1: + case GL_COMPRESSED_SIGNED_RED_RGTC1: + return numBlocks * 8; + + case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: + case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: + case GL_COMPRESSED_RG_RGTC2: + case GL_COMPRESSED_SIGNED_RG_RGTC2: + case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB: + case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB: + case GL_COMPRESSED_RGBA_BPTC_UNORM_ARB: + case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB: + return numBlocks * 16; + + case GL_RGBA8: + case GL_SRGB8_ALPHA8_EXT: + return numPixels * 4; + + default: + ri.Printf(PRINT_ALL, "Unsupported texture format %08x\n", picFormat); + return 0; + } + + return 0; +} + + +static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int width, int height, GLenum target, GLenum picFormat, int numMips, GLenum internalFormat, imgType_t type, imgFlags_t flags, qboolean subtexture ) { int dataFormat, dataType; qboolean rgtc = (internalFormat == GL_COMPRESSED_RG_RGTC2); + qboolean compressed = (!(picFormat == GL_RGBA8) || (picFormat == GL_SRGB8_ALPHA8_EXT)); + qboolean mipmap = !!(flags & IMGFLAG_MIPMAP); + qboolean picmip = !!(flags & IMGFLAG_PICMIP); + int size, miplevel; + qboolean lastMip = qfalse; - if (data && picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT) - { - int bytesPer4x4Block = 0; - int miplevel = 0; - - switch (picFormat) - { - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: - case GL_COMPRESSED_RED_RGTC1: - case GL_COMPRESSED_SIGNED_RED_RGTC1: - bytesPer4x4Block = 8; - break; - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: - case GL_COMPRESSED_RG_RGTC2: - case GL_COMPRESSED_SIGNED_RG_RGTC2: - case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB: - case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB: - case GL_COMPRESSED_RGBA_BPTC_UNORM_ARB: - case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB: - bytesPer4x4Block = 16; - break; - default: - ri.Printf(PRINT_ALL, "Unsupported texture format %08x\n", picFormat); - return; - break; - } - - if (flags & IMGFLAG_PICMIP) - { - for (miplevel = r_picmip->integer; miplevel > 0 && numMips > 1; miplevel--, numMips--) - { - int size = ((width + 3) / 4) * ((height + 3) / 4) * bytesPer4x4Block; - - x >>= 1; - y >>= 1; - width = MAX(1, width >> 1); - height = MAX(1, height >> 1); - data += size; - } - } - - if (!(flags & IMGFLAG_MIPMAP)) - numMips = 1; - - for (miplevel = 0; miplevel < numMips; miplevel++) - { - int size = ((width + 3) / 4) * ((height + 3) / 4) * bytesPer4x4Block; - - if (subtexture) - qglCompressedTextureSubImage2D(texture, GL_TEXTURE_2D, miplevel, x, y, width, height, internalFormat, size, data); - else - qglCompressedTextureImage2D(texture, GL_TEXTURE_2D, miplevel, internalFormat, width, height, 0, size, data); - - x >>= 1; - y >>= 1; - width = MAX(1, width >> 1); - height = MAX(1, height >> 1); - data += size; - } - - return; - } - - switch(internalFormat) + switch (internalFormat) { case GL_DEPTH_COMPONENT: case GL_DEPTH_COMPONENT16_ARB: @@ -1957,52 +1932,83 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int break; } - if ( subtexture ) - qglTextureSubImage2D(texture, GL_TEXTURE_2D, 0, x, y, width, height, dataFormat, dataType, data ); - else + if (!data) { - if (rgtc) - RawImage_UploadToRgtc2Texture(texture, data, width, height, 0); - else - qglTextureImage2D(texture, GL_TEXTURE_2D, 0, internalFormat, width, height, 0, dataFormat, dataType, data); - } - - if (flags & IMGFLAG_MIPMAP) - { - int miplevel = 0; - - while (width > 1 || height > 1) + miplevel = 0; + do { - if (data) - { - if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) - R_MipMapNormalHeight( data, data, width, height, glRefConfig.swizzleNormalmap ); - else - R_MipMapsRGB( data, width, height ); - } - + lastMip = (width == 1 && height == 1) || !mipmap; + qglTextureImage2D(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, NULL); + width = MAX(1, width >> 1); height = MAX(1, height >> 1); miplevel++; + } + while (!lastMip); - if ( data && r_colorMipLevels->integer ) - R_BlendOverTexture( (byte *)data, width * height, mipBlendColors[miplevel] ); + return; + } - if ( subtexture ) - { - x >>= 1; - y >>= 1; - qglTextureSubImage2D(texture, GL_TEXTURE_2D, miplevel, x, y, width, height, dataFormat, dataType, data ); - } - else - { - if (rgtc) - RawImage_UploadToRgtc2Texture(texture, data, width, height, miplevel); - else - qglTextureImage2D(texture, GL_TEXTURE_2D, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data); - } + if (compressed && picmip) + { + for (miplevel = r_picmip->integer; miplevel > 0 && numMips > 1; miplevel--, numMips--) + { + size = CalculateMipSize(width, height, picFormat); + x >>= 1; + y >>= 1; + width = MAX(1, width >> 1); + height = MAX(1, height >> 1); + data += size; } } + + miplevel = 0; + do + { + lastMip = (width == 1 && height == 1) || !mipmap; + size = CalculateMipSize(width, height, picFormat); + + if (compressed) + { + if (subtexture) + qglCompressedTextureSubImage2D(texture, target, miplevel, x, y, width, height, picFormat, size, data); + else + qglCompressedTextureImage2D(texture, target, miplevel, picFormat, width, height, 0, size, data); + } + else + { + if (miplevel != 0 && r_colorMipLevels->integer) + R_BlendOverTexture((byte *)data, width * height, mipBlendColors[miplevel]); + + if (rgtc) + RawImage_UploadToRgtc2Texture(texture, data, width, height, miplevel); + else if (subtexture) + qglTextureSubImage2D(texture, target, miplevel, x, y, width, height, dataFormat, dataType, data); + else + qglTextureImage2D(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data); + + if (!lastMip && numMips < 2) + { + if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT) + R_MipMapNormalHeight(data, data, width, height, glRefConfig.swizzleNormalmap); + else + R_MipMapsRGB(data, width, height); + } + } + + x >>= 1; + y >>= 1; + width = MAX(1, width >> 1); + height = MAX(1, height >> 1); + miplevel++; + + if (numMips > 1) + { + data += size; + numMips--; + } + } + while (!lastMip); } @@ -2023,19 +2029,35 @@ static void Upload32(byte *data, int x, int y, int width, int height, GLenum pic GLenum internalFormat = image->internalFormat; qboolean subtexture = (x != 0) || (y != 0) || (width != image->width) || (height != image->height); qboolean notScaled = qtrue; - qboolean mipmap = !!(flags & IMGFLAG_MIPMAP); + qboolean compressed = (picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT); + qboolean mipmap = !!(flags & IMGFLAG_MIPMAP) && (!compressed || numMips > 1); + qboolean cubemap = !!(flags & IMGFLAG_CUBEMAP); + GLenum uploadTarget = cubemap ? GL_TEXTURE_CUBE_MAP_POSITIVE_X : GL_TEXTURE_2D; + GLenum textureTarget = cubemap ? GL_TEXTURE_CUBE_MAP : GL_TEXTURE_2D; + int depth = cubemap ? 6 : 1; if (!data) { RawImage_ScaleToPower2(NULL, &width, &height, type, flags, NULL); - RawImage_UploadTexture(image->texnum, NULL, 0, 0, width, height, GL_RGBA8, 0, internalFormat, type, flags, qfalse); + for (i = 0; i < depth; i++) + RawImage_UploadTexture(image->texnum, NULL, 0, 0, width, height, uploadTarget + i, GL_RGBA8, 0, internalFormat, type, flags, qfalse); goto done; } else if (!subtexture) { - if (picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT) + if (compressed || cubemap) { - RawImage_UploadTexture(image->texnum, data, 0, 0, width, height, picFormat, numMips, internalFormat, type, flags, qfalse); + for (i = 0; i < depth; i++) + { + int w2 = width, h2 = height; + RawImage_UploadTexture(image->texnum, data, 0, 0, width, height, uploadTarget + i, picFormat, numMips, internalFormat, type, flags, qfalse); + for (c = numMips; c; c--) + { + data += CalculateMipSize(w2, h2, picFormat); + w2 = MAX(1, w2 >> 1); + h2 = MAX(1, h2 >> 1); + } + } goto done; } notScaled = RawImage_ScaleToPower2(&data, &width, &height, type, flags, &resampledBuffer); @@ -2075,12 +2097,12 @@ static void Upload32(byte *data, int x, int y, int width, int height, GLenum pic if (subtexture) { // FIXME: Incorrect if original texture was not a power of 2 texture or picmipped - RawImage_UploadTexture(image->texnum, data, x, y, width, height, GL_RGBA8, 0, internalFormat, type, flags, qtrue); + RawImage_UploadTexture(image->texnum, data, x, y, width, height, uploadTarget, GL_RGBA8, 0, internalFormat, type, flags, qtrue); GL_CheckErrors(); return; } - RawImage_UploadTexture(image->texnum, data, 0, 0, width, height, GL_RGBA8, 0, internalFormat, type, flags, qfalse); + RawImage_UploadTexture(image->texnum, data, 0, 0, width, height, uploadTarget, GL_RGBA8, 0, internalFormat, type, flags, qfalse); done: @@ -2089,20 +2111,20 @@ done: if (mipmap) { - if ( textureFilterAnisotropic ) - qglTextureParameteri( image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, - (GLint)Com_Clamp( 1, maxAnisotropy, r_ext_max_anisotropy->integer ) ); + if (textureFilterAnisotropic && !cubemap) + qglTextureParameteri(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, + (GLint)Com_Clamp(1, maxAnisotropy, r_ext_max_anisotropy->integer)); - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); + qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, gl_filter_min); + qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, gl_filter_max); } else { - if ( textureFilterAnisotropic ) - qglTextureParameteri(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1); + if (textureFilterAnisotropic && !cubemap) + qglTextureParameteri(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1); - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } // Fix for sampling depth buffer on old nVidia cards @@ -2113,9 +2135,9 @@ done: case GL_DEPTH_COMPONENT16_ARB: case GL_DEPTH_COMPONENT24_ARB: case GL_DEPTH_COMPONENT32_ARB: - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + qglTextureParameterf(image->texnum, textureTarget, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); + qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); break; default: break; @@ -2169,49 +2191,20 @@ image_t *R_CreateImage2( const char *name, byte *pic, int width, int height, GLe glWrapClampMode = GL_REPEAT; if (!internalFormat) - { - if (image->flags & IMGFLAG_CUBEMAP) - internalFormat = GL_RGBA8; - else - internalFormat = RawImage_GetFormat(pic, width * height, picFormat, isLightmap, image->type, image->flags); - } + internalFormat = RawImage_GetFormat(pic, width * height, picFormat, isLightmap, image->type, image->flags); image->internalFormat = internalFormat; + Upload32(pic, 0, 0, image->width, image->height, picFormat, numMips, image); + if (image->flags & IMGFLAG_CUBEMAP) { - qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - - qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - if (image->flags & IMGFLAG_MIPMAP) - { - qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - } - else - { - qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - } - - qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - qglTextureImage2D(image->texnum, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, GL_RGBA8, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, pic); - - if (image->flags & IMGFLAG_MIPMAP) - qglGenerateTextureMipmap(image->texnum, GL_TEXTURE_CUBE_MAP); - - image->uploadWidth = width; - image->uploadHeight = height; + qglTextureParameterf(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, glWrapClampMode); + qglTextureParameterf(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, glWrapClampMode); + qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, glWrapClampMode); } else { - Upload32( pic, 0, 0, image->width, image->height, picFormat, numMips, image ); - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode); qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode); } @@ -2383,6 +2376,7 @@ image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags ) GLenum picFormat; int picNumMips; long hash; + imgFlags_t checkFlagsTrue, checkFlagsFalse; if (!name) { return NULL; @@ -2413,7 +2407,10 @@ image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags ) return NULL; } - if (r_normalMapping->integer && (picFormat == GL_RGBA8) && !(type == IMGTYPE_NORMAL) && (flags & IMGFLAG_PICMIP) && (flags & IMGFLAG_MIPMAP) && (flags & IMGFLAG_GENNORMALMAP)) + checkFlagsTrue = IMGFLAG_PICMIP | IMGFLAG_MIPMAP | IMGFLAG_GENNORMALMAP; + checkFlagsFalse = IMGFLAG_CUBEMAP; + if (r_normalMapping->integer && (picFormat == GL_RGBA8) && (type == IMGTYPE_COLORALPHA) && + ((flags & checkFlagsTrue) == checkFlagsTrue) && !(flags & checkFlagsFalse)) { char normalName[MAX_QPATH]; image_t *normalImage; @@ -2516,6 +2513,20 @@ image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags ) } } + // force mipmaps off if image is compressed but doesn't have enough mips + if ((flags & IMGFLAG_MIPMAP) && picFormat != GL_RGBA8 && picFormat != GL_SRGB8_ALPHA8_EXT) + { + int wh = MAX(width, height); + int neededMips = 0; + while (wh) + { + neededMips++; + wh >>= 1; + } + if (neededMips > picNumMips) + flags &= ~IMGFLAG_MIPMAP; + } + image = R_CreateImage2( ( char * ) name, pic, width, height, picFormat, picNumMips, type, flags, 0 ); ri.Free( pic ); return image; From 41791c662ff89e1edf7fdefe1e96428ccd7f93af Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 29 Jan 2016 20:14:35 -0800 Subject: [PATCH 096/480] Fix frame_msec possibly being zero in cl_input.c. This fixes a mouse freezing bug. --- code/client/cl_input.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/client/cl_input.c b/code/client/cl_input.c index 6669a406..296a7cc0 100644 --- a/code/client/cl_input.c +++ b/code/client/cl_input.c @@ -632,6 +632,12 @@ void CL_CreateNewCommands( void ) { frame_msec = com_frameTime - old_com_frameTime; + // if running over 1000fps, act as if each frame is 1ms + // prevents divisions by zero + if ( frame_msec < 1 ) { + frame_msec = 1; + } + // if running less than 5fps, truncate the extra time to prevent // unexpected moves after a hitch if ( frame_msec > 200 ) { From ad952b9537ab8d465c5b5006feb29975ad57f74b Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 1 Feb 2016 21:37:23 -0800 Subject: [PATCH 097/480] OpenGL2: Merge several cvars into r_pbr. r_glossIsRoughness, r_specularIsMetallic, r_framebufferGamma, r_tonemapGamma, r_materialGamma, r_lightGamma --- code/renderergl2/glsl/calclevels4x_fp.glsl | 4 +- code/renderergl2/glsl/lightall_fp.glsl | 48 +++++++---------- code/renderergl2/glsl/tonemap_fp.glsl | 8 +-- code/renderergl2/tr_bsp.c | 4 +- code/renderergl2/tr_glsl.c | 19 +------ code/renderergl2/tr_image.c | 5 ++ code/renderergl2/tr_init.c | 18 ++----- code/renderergl2/tr_local.h | 8 +-- code/renderergl2/tr_scene.c | 2 +- code/renderergl2/tr_shader.c | 60 ++++++++++++++++------ opengl2-readme.md | 20 +++----- 11 files changed, 88 insertions(+), 108 deletions(-) diff --git a/code/renderergl2/glsl/calclevels4x_fp.glsl b/code/renderergl2/glsl/calclevels4x_fp.glsl index 1de59e9f..0d298b62 100644 --- a/code/renderergl2/glsl/calclevels4x_fp.glsl +++ b/code/renderergl2/glsl/calclevels4x_fp.glsl @@ -14,8 +14,8 @@ vec3 GetValues(vec2 offset, vec3 current) #ifdef FIRST_PASS - #if defined(r_framebufferGamma) - minAvgMax = pow(minAvgMax, vec3(r_framebufferGamma)); + #if defined(USE_PBR) + minAvgMax = pow(minAvgMax, vec3(2.2)); #endif float lumi = max(dot(LUMINANCE_VECTOR, minAvgMax), 0.000001); diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index b8f3985f..eb8ba900 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -276,9 +276,9 @@ void main() attenuation = 1.0; #endif - #if defined(r_lightGamma) - lightColor = pow(lightColor, vec3(r_lightGamma)); - ambientColor = pow(ambientColor, vec3(r_lightGamma)); + #if defined(USE_PBR) + lightColor = pow(lightColor, vec3(2.2)); + ambientColor = pow(ambientColor, vec3(2.2)); #endif #if defined(USE_NORMALMAP) @@ -319,7 +319,7 @@ void main() // Recover any unused light as ambient, in case attenuation is over 4x or // light is below the surface - ambientColor = clamp(ambientColor - lightColor * surfNL, 0.0, 1.0); + ambientColor = max(ambientColor - lightColor * surfNL, vec3(0.0)); #endif vec3 reflectance; @@ -335,21 +335,18 @@ void main() specular *= u_SpecularScale; - #if defined(r_materialGamma) - diffuse.rgb = pow(diffuse.rgb, vec3(r_materialGamma)); - #if !defined(SPECULAR_IS_METALLIC) - specular.rgb = pow(specular.rgb, vec3(r_materialGamma)); - #endif + #if defined(USE_PBR) + diffuse.rgb = pow(diffuse.rgb, vec3(2.2)); #endif float gloss = specular.a; - #if defined(GLOSS_IS_ROUGHNESS) - float roughness = gloss; + #if defined(USE_PBR) + float roughness = 1.0 - specular.r; #else float roughness = exp2(-3.0 * gloss); #endif - #if defined(SPECULAR_IS_METALLIC) + #if defined(USE_PBR) // diffuse is actually base color, and green of specular is metallicness float metallic = specular.g; @@ -374,7 +371,7 @@ void main() // from http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/ vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir; - #if defined(GLOSS_IS_ROUGHNESS) + #if defined(USE_PBR) vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 * roughness).rgb * u_EnableTextures.w; #else vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 - gloss * 7.0).rgb * u_EnableTextures.w; @@ -385,8 +382,8 @@ void main() //vec3 cubeLightDiffuse = max(textureCubeLod(u_CubeMap, N, 6.0).rgb, 0.5 / 255.0); //cubeLightColor /= dot(cubeLightDiffuse, vec3(0.2125, 0.7154, 0.0721)); - #if defined(r_framebufferGamma) - cubeLightColor = pow(cubeLightColor, vec3(r_framebufferGamma)); + #if defined(USE_PBR) + cubeLightColor = pow(cubeLightColor, vec3(2.2)); #endif // multiply cubemap values by lighting @@ -421,8 +418,8 @@ void main() lightColor = u_PrimaryLightColor; - #if defined(r_lightGamma) - lightColor = pow(lightColor, vec3(r_lightGamma)); + #if defined(USE_PBR) + lightColor = pow(lightColor, vec3(2.2)); #endif #if defined(USE_SHADOWMAP) @@ -434,6 +431,11 @@ void main() gl_FragColor.rgb += lightColor * reflectance * NL2; #endif + + #if defined(USE_PBR) + gl_FragColor.rgb = pow(gl_FragColor.rgb, vec3(1.0 / 2.2)); + #endif + #else lightColor = var_Color.rgb; @@ -441,21 +443,9 @@ void main() lightColor *= lightmapColor.rgb; #endif - #if defined(r_lightGamma) - lightColor = pow(lightColor, vec3(r_lightGamma)); - #endif - - #if defined(r_materialGamma) - diffuse.rgb = pow(diffuse.rgb, vec3(r_materialGamma)); - #endif - gl_FragColor.rgb = diffuse.rgb * lightColor; #endif -#if defined(r_framebufferGamma) - gl_FragColor.rgb = pow(gl_FragColor.rgb, vec3(1.0 / r_framebufferGamma)); -#endif - gl_FragColor.a = diffuse.a * var_Color.a; } diff --git a/code/renderergl2/glsl/tonemap_fp.glsl b/code/renderergl2/glsl/tonemap_fp.glsl index 1368c5bd..5d8841d6 100644 --- a/code/renderergl2/glsl/tonemap_fp.glsl +++ b/code/renderergl2/glsl/tonemap_fp.glsl @@ -28,8 +28,8 @@ void main() { vec4 color = texture2D(u_TextureMap, var_TexCoords) * u_Color; -#if defined(r_framebufferGamma) - color.rgb = pow(color.rgb, vec3(r_framebufferGamma)); +#if defined(USE_PBR) + color.rgb = pow(color.rgb, vec3(2.2)); #endif vec3 minAvgMax = texture2D(u_LevelsMap, var_TexCoords).rgb; @@ -46,8 +46,8 @@ void main() color.rgb = clamp(color.rgb * var_InvWhite, 0.0, 1.0); -#if defined(r_tonemapGamma) - color.rgb = pow(color.rgb, vec3(1.0 / r_tonemapGamma)); +#if defined(USE_PBR) + color.rgb = pow(color.rgb, vec3(1.0 / 2.2)); #endif gl_FragColor = color; diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index 6c4cbe21..ed7ece72 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -141,7 +141,7 @@ static void R_ColorShiftLightingFloats(float in[4], float out[4], float scale ) float r, g, b; #if defined(USE_OVERBRIGHT) - scale *= pow(2.0f, r_mapOverBrightBits->integer - tr.overbrightBits); + scale *= 1 << (r_mapOverBrightBits->integer - tr.overbrightBits); #endif r = in[0] * scale; @@ -2762,7 +2762,7 @@ void R_LoadLightGrid( lump_t *l ) { if (hdrLightGrid) { #if defined(USE_OVERBRIGHT) - float lightScale = pow(2, r_mapOverBrightBits->integer - tr.overbrightBits); + float lightScale = 1 << (r_mapOverBrightBits->integer - tr.overbrightBits); #else float lightScale = 1.0f; #endif diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index eaa7c8f5..f8637a66 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -322,17 +322,8 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha Q_strcat(dest, size, va("#ifndef r_FBufScale\n#define r_FBufScale vec2(%f, %f)\n#endif\n", fbufWidthScale, fbufHeightScale)); - if (r_materialGamma->value != 1.0f) - Q_strcat(dest, size, va("#ifndef r_materialGamma\n#define r_materialGamma %f\n#endif\n", r_materialGamma->value)); - - if (r_lightGamma->value != 1.0f) - Q_strcat(dest, size, va("#ifndef r_lightGamma\n#define r_lightGamma %f\n#endif\n", r_lightGamma->value)); - - if (r_framebufferGamma->value != 1.0f) - Q_strcat(dest, size, va("#ifndef r_framebufferGamma\n#define r_framebufferGamma %f\n#endif\n", r_framebufferGamma->value)); - - if (r_tonemapGamma->value != 1.0f) - Q_strcat(dest, size, va("#ifndef r_tonemapGamma\n#define r_tonemapGamma %f\n#endif\n", r_tonemapGamma->value)); + if (r_pbr->integer) + Q_strcat(dest, size, "#define USE_PBR\n"); if (extra) { @@ -1009,12 +1000,6 @@ void GLSL_InitGPUShaders(void) extradefines[0] = '\0'; - if (r_specularIsMetallic->value) - Q_strcat(extradefines, 1024, "#define SPECULAR_IS_METALLIC\n"); - - if (r_glossIsRoughness->value) - Q_strcat(extradefines, 1024, "#define GLOSS_IS_ROUGHNESS\n"); - if (r_dlightMode->integer >= 2) Q_strcat(extradefines, 1024, "#define USE_SHADOWMAP\n"); diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index e508b15d..69ddba19 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -2858,6 +2858,11 @@ void R_SetColorMappings( void ) { tr.overbrightBits = 0; } + // don't allow more overbright bits than map overbright bits + if ( tr.overbrightBits > r_mapOverBrightBits->integer ) { + tr.overbrightBits = r_mapOverBrightBits->integer; + } + tr.identityLight = 1.0f / ( 1 << tr.overbrightBits ); tr.identityLightByte = 255 * tr.identityLight; diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 3f387232..282ce926 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -132,11 +132,6 @@ cvar_t *r_forceAutoExposure; cvar_t *r_forceAutoExposureMin; cvar_t *r_forceAutoExposureMax; -cvar_t *r_materialGamma; -cvar_t *r_lightGamma; -cvar_t *r_framebufferGamma; -cvar_t *r_tonemapGamma; - cvar_t *r_depthPrepass; cvar_t *r_ssao; @@ -146,8 +141,7 @@ cvar_t *r_deluxeMapping; cvar_t *r_parallaxMapping; cvar_t *r_cubeMapping; cvar_t *r_cubemapSize; -cvar_t *r_specularIsMetallic; -cvar_t *r_glossIsRoughness; +cvar_t *r_pbr; cvar_t *r_baseNormalX; cvar_t *r_baseNormalY; cvar_t *r_baseParallax; @@ -1213,7 +1207,7 @@ void R_Register( void ) r_floatLightmap = ri.Cvar_Get( "r_floatLightmap", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_postProcess = ri.Cvar_Get( "r_postProcess", "1", CVAR_ARCHIVE ); - r_toneMap = ri.Cvar_Get( "r_toneMap", "1", CVAR_ARCHIVE | CVAR_LATCH ); + r_toneMap = ri.Cvar_Get( "r_toneMap", "1", CVAR_ARCHIVE ); r_forceToneMap = ri.Cvar_Get( "r_forceToneMap", "0", CVAR_CHEAT ); r_forceToneMapMin = ri.Cvar_Get( "r_forceToneMapMin", "-8.0", CVAR_CHEAT ); r_forceToneMapAvg = ri.Cvar_Get( "r_forceToneMapAvg", "-2.0", CVAR_CHEAT ); @@ -1226,11 +1220,6 @@ void R_Register( void ) r_cameraExposure = ri.Cvar_Get( "r_cameraExposure", "0", CVAR_CHEAT ); - r_materialGamma = ri.Cvar_Get( "r_materialGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); - r_lightGamma = ri.Cvar_Get( "r_lightGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); - r_framebufferGamma = ri.Cvar_Get( "r_framebufferGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); - r_tonemapGamma = ri.Cvar_Get( "r_tonemapGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); - r_depthPrepass = ri.Cvar_Get( "r_depthPrepass", "1", CVAR_ARCHIVE ); r_ssao = ri.Cvar_Get( "r_ssao", "0", CVAR_LATCH | CVAR_ARCHIVE ); @@ -1240,8 +1229,7 @@ void R_Register( void ) r_parallaxMapping = ri.Cvar_Get( "r_parallaxMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_cubeMapping = ri.Cvar_Get( "r_cubeMapping", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_cubemapSize = ri.Cvar_Get( "r_cubemapSize", "128", CVAR_ARCHIVE | CVAR_LATCH ); - r_specularIsMetallic = ri.Cvar_Get( "r_specularIsMetallic", "0", CVAR_ARCHIVE | CVAR_LATCH ); - r_glossIsRoughness = ri.Cvar_Get("r_glossIsRoughness", "0", CVAR_ARCHIVE | CVAR_LATCH); + r_pbr = ri.Cvar_Get("r_pbr", "0", CVAR_ARCHIVE | CVAR_LATCH); r_baseNormalX = ri.Cvar_Get( "r_baseNormalX", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); r_baseNormalY = ri.Cvar_Get( "r_baseNormalY", "1.0", CVAR_ARCHIVE | CVAR_LATCH ); r_baseParallax = ri.Cvar_Get( "r_baseParallax", "0.05", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index c66171f5..17b13749 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1776,11 +1776,6 @@ extern cvar_t *r_forceAutoExposureMax; extern cvar_t *r_cameraExposure; -extern cvar_t *r_materialGamma; -extern cvar_t *r_lightGamma; -extern cvar_t *r_framebufferGamma; -extern cvar_t *r_tonemapGamma; - extern cvar_t *r_depthPrepass; extern cvar_t *r_ssao; @@ -1790,8 +1785,7 @@ extern cvar_t *r_deluxeMapping; extern cvar_t *r_parallaxMapping; extern cvar_t *r_cubeMapping; extern cvar_t *r_cubemapSize; -extern cvar_t *r_specularIsMetallic; -extern cvar_t *r_glossIsRoughness; +extern cvar_t *r_pbr; extern cvar_t *r_baseNormalX; extern cvar_t *r_baseNormalY; extern cvar_t *r_baseParallax; diff --git a/code/renderergl2/tr_scene.c b/code/renderergl2/tr_scene.c index bd85944d..11ef0e89 100644 --- a/code/renderergl2/tr_scene.c +++ b/code/renderergl2/tr_scene.c @@ -336,7 +336,7 @@ void RE_BeginScene(const refdef_t *fd) else { #if defined(USE_OVERBRIGHT) - float scale = pow(2, r_mapOverBrightBits->integer - tr.overbrightBits - 8); + float scale = (1 << (r_mapOverBrightBits->integer - tr.overbrightBits)) / 255.0f;; #else float scale = (1 << r_mapOverBrightBits->integer) / 255.0f; #endif diff --git a/code/renderergl2/tr_shader.c b/code/renderergl2/tr_shader.c index 5e664f4f..0ef90211 100644 --- a/code/renderergl2/tr_shader.c +++ b/code/renderergl2/tr_shader.c @@ -934,9 +934,18 @@ static qboolean ParseStage( shaderStage_t *stage, char **text ) ri.Printf( PRINT_WARNING, "WARNING: missing parameter for specular reflectance in shader '%s'\n", shader.name ); continue; } - stage->specularScale[0] = - stage->specularScale[1] = - stage->specularScale[2] = atof( token ); + + if (r_pbr->integer) + { + // interpret specularReflectance < 0.5 as nonmetal + stage->specularScale[1] = (atof(token) < 0.5f) ? 0.0f : 1.0f; + } + else + { + stage->specularScale[0] = + stage->specularScale[1] = + stage->specularScale[2] = atof( token ); + } } // // specularExponent @@ -954,8 +963,8 @@ static qboolean ParseStage( shaderStage_t *stage, char **text ) exponent = atof( token ); - if (r_glossIsRoughness->integer) - stage->specularScale[3] = powf(2.0f / (exponent + 2.0), 0.25); + if (r_pbr->integer) + stage->specularScale[0] = 1.0f - powf(2.0f / (exponent + 2.0), 0.25); else { // Change shininess to gloss @@ -980,8 +989,8 @@ static qboolean ParseStage( shaderStage_t *stage, char **text ) gloss = atof(token); - if (r_glossIsRoughness->integer) - stage->specularScale[3] = exp2f(-3.0f * gloss); + if (r_pbr->integer) + stage->specularScale[0] = 1.0f - exp2f(-3.0f * gloss); else stage->specularScale[3] = gloss; } @@ -1001,8 +1010,8 @@ static qboolean ParseStage( shaderStage_t *stage, char **text ) roughness = atof(token); - if (r_glossIsRoughness->integer) - stage->specularScale[3] = roughness; + if (r_pbr->integer) + stage->specularScale[0] = 1.0 - roughness; else { if (roughness >= 0.125) @@ -1062,6 +1071,7 @@ static qboolean ParseStage( shaderStage_t *stage, char **text ) } // // specularScale + // or specularScale with r_pbr 1 // or specularScale // or specularScale // @@ -1088,10 +1098,19 @@ static qboolean ParseStage( shaderStage_t *stage, char **text ) token = COM_ParseExt(text, qfalse); if ( token[0] == 0 ) { - // two values, rgb then gloss - stage->specularScale[3] = stage->specularScale[1]; - stage->specularScale[1] = - stage->specularScale[2] = stage->specularScale[0]; + if (r_pbr->integer) + { + // two values, metallic then smoothness + float smoothness = stage->specularScale[1]; + stage->specularScale[1] = (stage->specularScale[0] < 0.5f) ? 0.0f : 1.0f; + stage->specularScale[0] = smoothness; + } + { + // two values, rgb then gloss + stage->specularScale[3] = stage->specularScale[1]; + stage->specularScale[1] = + stage->specularScale[2] = stage->specularScale[0]; + } continue; } @@ -2857,10 +2876,17 @@ static void InitShader( const char *name, int lightmapIndex ) { // default normal/specular VectorSet4(stages[i].normalScale, 0.0f, 0.0f, 0.0f, 0.0f); - stages[i].specularScale[0] = - stages[i].specularScale[1] = - stages[i].specularScale[2] = r_baseSpecular->value; - stages[i].specularScale[3] = r_baseGloss->value; + if (r_pbr->integer) + { + stages[i].specularScale[0] = r_baseGloss->value; + } + else + { + stages[i].specularScale[0] = + stages[i].specularScale[1] = + stages[i].specularScale[2] = r_baseSpecular->value; + stages[i].specularScale[3] = r_baseGloss->value; + } } } diff --git a/opengl2-readme.md b/opengl2-readme.md index e0efd58c..d2757d4b 100644 --- a/opengl2-readme.md +++ b/opengl2-readme.md @@ -222,6 +222,12 @@ Cvars for advanced material usage: 0.05 - Standard depth. (default) 0.1 - Looks broken. +* `r_pbr` - Enable physically based rendering. + Experimental, will not look correct without + assets meant for it. + 0 - No. (default) + 1 - Yes. + Cvars for image interpolation and generation: * `r_imageUpsample` - Use interpolation to artifically increase @@ -339,20 +345,6 @@ Cvars that you probably don't care about or shouldn't mess with: * `r_shadowCascadeZBias` - Z-bias for shadow cascade frustums. -256 - Default. -* `r_materialGamma` - Gamma level for material textures. - (diffuse, specular) - 1.0 - Quake 3, fastest. (default) - -* `r_lightGamma` - Gamma level for light. - (lightmap, lightgrid, vertex lights) - 1.0 - Quake 3, fastest. (default) - -* `r_framebufferGamma` - Gamma level for framebuffers. - 1.0 - Quake 3, fastest. (default) - -* `r_tonemapGamma` - Gamma applied after tonemapping. - 1.0 - Quake 3, fastest. (default) - Cvars that have broken bits: * `r_dlightMode` - Change how dynamic lights look. From 871872689e647ac23ad191459a9330a5fe0f10cc Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 10 Feb 2016 16:25:32 -0800 Subject: [PATCH 098/480] OpenGL2: Add named cubemaps and per-map env.json parsing. --- code/qcommon/json.h | 353 ++++++++++++++++++++++++++++++++++ code/renderergl2/tr_backend.c | 11 +- code/renderergl2/tr_bsp.c | 97 +++++++++- code/renderergl2/tr_local.h | 1 + code/renderergl2/tr_main.c | 2 +- 5 files changed, 458 insertions(+), 6 deletions(-) create mode 100644 code/qcommon/json.h diff --git a/code/qcommon/json.h b/code/qcommon/json.h new file mode 100644 index 00000000..cfc5b3ca --- /dev/null +++ b/code/qcommon/json.h @@ -0,0 +1,353 @@ +/* +=========================================================================== +Copyright (C) 2016 James Canete + +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 Street, Fifth Floor, Boston, MA 02110-1301, USA. +=========================================================================== +*/ + +#ifndef JSON_H +#define JSON_H + +enum +{ + JSONTYPE_STRING, // string + JSONTYPE_OBJECT, // object + JSONTYPE_ARRAY, // array + JSONTYPE_VALUE, // number, true, false, or null + JSONTYPE_ERROR // out of data +}; + +// -------------------------------------------------------------------------- +// Array Functions +// -------------------------------------------------------------------------- + +// Get pointer to first value in array +// When given pointer to an array, returns pointer to the first +// returns NULL if array is empty or not an array. +const char *JSON_ArrayGetFirstValue(const char *json, const char *jsonEnd); + +// Get pointer to next value in array +// When given pointer to a value, returns pointer to the next value +// returns NULL when no next value. +const char *JSON_ArrayGetNextValue(const char *json, const char *jsonEnd); + +// Get pointers to values in an array +// returns 0 if not an array, array is empty, or out of data +// returns number of values in the array and copies into index if successful +unsigned int JSON_ArrayGetIndex(const char *json, const char *jsonEnd, const char **indexes, unsigned int numIndexes); + +// Get pointer to indexed value from array +// returns NULL if not an array, no index, or out of data +const char *JSON_ArrayGetValue(const char *json, const char *jsonEnd, unsigned int index); + +// -------------------------------------------------------------------------- +// Object Functions +// -------------------------------------------------------------------------- + +// Get pointer to named value from object +// returns NULL if not an object, name not found, or out of data +const char *JSON_ObjectGetNamedValue(const char *json, const char *jsonEnd, const char *name); + +// -------------------------------------------------------------------------- +// Value Functions +// -------------------------------------------------------------------------- + +// Get type of value +// returns JSONTYPE_ERROR if out of data +unsigned int JSON_ValueGetType(const char *json, const char *jsonEnd); + +// Get value as string +// returns 0 if out of data +// returns length and copies into string if successful, including terminating nul. +// string values are stripped of enclosing quotes but not escaped +unsigned int JSON_ValueGetString(const char *json, const char *jsonEnd, char *outString, unsigned int stringLen); + +// Get value as appropriate type +// returns 0 if value is false, value is null, or out of data +// returns 1 if value is true +// returns value otherwise +double JSON_ValueGetDouble(const char *json, const char *jsonEnd); +float JSON_ValueGetFloat(const char *json, const char *jsonEnd); +int JSON_ValueGetInt(const char *json, const char *jsonEnd); + +#endif + +#ifdef JSON_IMPLEMENTATION +#include + +// -------------------------------------------------------------------------- +// Internal Functions +// -------------------------------------------------------------------------- + +static const char *JSON_SkipSeparators(const char *json, const char *jsonEnd); +static const char *JSON_SkipString(const char *json, const char *jsonEnd); +static const char *JSON_SkipStruct(const char *json, const char *jsonEnd); +static const char *JSON_SkipValue(const char *json, const char *jsonEnd); +static const char *JSON_SkipValueAndSeparators(const char *json, const char *jsonEnd); + +#define IS_SEPARATOR(x) ((x) == ' ' || (x) == '\t' || (x) == '\n' || (x) == '\r' || (x) == ',' || (x) == ':') +#define IS_STRUCT_OPEN(x) ((x) == '{' || (x) == '[') +#define IS_STRUCT_CLOSE(x) ((x) == '}' || (x) == ']') + +static const char *JSON_SkipSeparators(const char *json, const char *jsonEnd) +{ + while (json < jsonEnd && IS_SEPARATOR(*json)) + json++; + + return json; +} + +static const char *JSON_SkipString(const char *json, const char *jsonEnd) +{ + for (json++; json < jsonEnd && *json != '"'; json++) + if (*json == '\\') + json++; + + return (json + 1 > jsonEnd) ? jsonEnd : json + 1; +} + +static const char *JSON_SkipStruct(const char *json, const char *jsonEnd) +{ + json = JSON_SkipSeparators(json + 1, jsonEnd); + while (json < jsonEnd && !IS_STRUCT_CLOSE(*json)) + json = JSON_SkipValueAndSeparators(json, jsonEnd); + + return (json + 1 > jsonEnd) ? jsonEnd : json + 1; +} + +static const char *JSON_SkipValue(const char *json, const char *jsonEnd) +{ + if (json >= jsonEnd) + return jsonEnd; + else if (*json == '"') + json = JSON_SkipString(json, jsonEnd); + else if (IS_STRUCT_OPEN(*json)) + json = JSON_SkipStruct(json, jsonEnd); + else + { + while (json < jsonEnd && !IS_SEPARATOR(*json) && !IS_STRUCT_CLOSE(*json)) + json++; + } + + return json; +} + +static const char *JSON_SkipValueAndSeparators(const char *json, const char *jsonEnd) +{ + json = JSON_SkipValue(json, jsonEnd); + return JSON_SkipSeparators(json, jsonEnd); +} + +// returns 0 if value requires more parsing, 1 if no more data/false/null, 2 if true +static unsigned int JSON_NoParse(const char *json, const char *jsonEnd) +{ + if (!json || json >= jsonEnd || *json == 'f' || *json == 'n') + return 1; + + if (*json == 't') + return 2; + + return 0; +} + +// -------------------------------------------------------------------------- +// Array Functions +// -------------------------------------------------------------------------- + +const char *JSON_ArrayGetFirstValue(const char *json, const char *jsonEnd) +{ + if (!json || json >= jsonEnd || !IS_STRUCT_OPEN(*json)) + return NULL; + + json = JSON_SkipSeparators(json + 1, jsonEnd); + + return (json >= jsonEnd || IS_STRUCT_CLOSE(*json)) ? NULL : json; +} + +const char *JSON_ArrayGetNextValue(const char *json, const char *jsonEnd) +{ + if (!json || json >= jsonEnd || IS_STRUCT_CLOSE(*json)) + return NULL; + + json = JSON_SkipValueAndSeparators(json, jsonEnd); + + return (json >= jsonEnd || IS_STRUCT_CLOSE(*json)) ? NULL : json; +} + +unsigned int JSON_ArrayGetIndex(const char *json, const char *jsonEnd, const char **indexes, unsigned int numIndexes) +{ + unsigned int length = 0; + + for (json = JSON_ArrayGetFirstValue(json, jsonEnd); json; json = JSON_ArrayGetNextValue(json, jsonEnd)) + { + if (indexes && numIndexes) + { + *indexes++ = json; + numIndexes--; + } + length++; + } + + return length; +} + +const char *JSON_ArrayGetValue(const char *json, const char *jsonEnd, unsigned int index) +{ + for (json = JSON_ArrayGetFirstValue(json, jsonEnd); json && index; json = JSON_ArrayGetNextValue(json, jsonEnd)) + index--; + + return json; +} + +// -------------------------------------------------------------------------- +// Object Functions +// -------------------------------------------------------------------------- + +const char *JSON_ObjectGetNamedValue(const char *json, const char *jsonEnd, const char *name) +{ + unsigned int nameLen = strlen(name); + + for (json = JSON_ArrayGetFirstValue(json, jsonEnd); json; json = JSON_ArrayGetNextValue(json, jsonEnd)) + { + if (*json == '"') + { + const char *thisNameStart, *thisNameEnd; + + thisNameStart = json + 1; + json = JSON_SkipString(json, jsonEnd); + thisNameEnd = json - 1; + json = JSON_SkipSeparators(json, jsonEnd); + + if ((unsigned int)(thisNameEnd - thisNameStart) == nameLen) + if (strncmp(thisNameStart, name, nameLen) == 0) + return json; + } + } + + return NULL; +} + +// -------------------------------------------------------------------------- +// Value Functions +// -------------------------------------------------------------------------- + +unsigned int JSON_ValueGetType(const char *json, const char *jsonEnd) +{ + if (!json || json >= jsonEnd) + return JSONTYPE_ERROR; + else if (*json == '"') + return JSONTYPE_STRING; + else if (*json == '{') + return JSONTYPE_OBJECT; + else if (*json == '[') + return JSONTYPE_ARRAY; + + return JSONTYPE_VALUE; +} + +unsigned int JSON_ValueGetString(const char *json, const char *jsonEnd, char *outString, unsigned int stringLen) +{ + const char *stringEnd, *stringStart; + + if (!json) + { + *outString = '\0'; + return 0; + } + + stringStart = json; + stringEnd = JSON_SkipValue(stringStart, jsonEnd); + if (stringEnd >= jsonEnd) + { + *outString = '\0'; + return 0; + } + + // skip enclosing quotes if they exist + if (*stringStart == '"') + stringStart++; + + if (*(stringEnd - 1) == '"') + stringEnd--; + + stringLen--; + if (stringLen > stringEnd - stringStart) + stringLen = stringEnd - stringStart; + + json = stringStart; + while (stringLen--) + *outString++ = *json++; + *outString = '\0'; + + return stringEnd - stringStart; +} + +double JSON_ValueGetDouble(const char *json, const char *jsonEnd) +{ + char cValue[256]; + double dValue = 0.0; + unsigned int np = JSON_NoParse(json, jsonEnd); + + if (np) + return (double)(np - 1); + + if (!JSON_ValueGetString(json, jsonEnd, cValue, 256)) + return 0.0; + + sscanf(cValue, "%lf", &dValue); + + return dValue; +} + +float JSON_ValueGetFloat(const char *json, const char *jsonEnd) +{ + char cValue[256]; + float fValue = 0.0f; + unsigned int np = JSON_NoParse(json, jsonEnd); + + if (np) + return (float)(np - 1); + + if (!JSON_ValueGetString(json, jsonEnd, cValue, 256)) + return 0.0f; + + sscanf(cValue, "%f", &fValue); + + return fValue; +} + +int JSON_ValueGetInt(const char *json, const char *jsonEnd) +{ + char cValue[256]; + int iValue = 0; + unsigned int np = JSON_NoParse(json, jsonEnd); + + if (np) + return np - 1; + + if (!JSON_ValueGetString(json, jsonEnd, cValue, 256)) + return 0; + + sscanf(cValue, "%d", &iValue); + + return iValue; +} + +#undef IS_SEPARATOR +#undef IS_STRUCT_OPEN +#undef IS_STRUCT_CLOSE + +#endif diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index df70144e..c02ba26f 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -1674,7 +1674,16 @@ const void *RB_ExportCubemaps(const void *data) p += sideSize; } - Com_sprintf(filename, MAX_QPATH, "cubemaps/%s/%03d.dds", tr.world->baseName, i); + if (cubemap->name[0]) + { + COM_StripExtension(cubemap->name, filename, MAX_QPATH); + Q_strcat(filename, MAX_QPATH, ".dds"); + } + else + { + Com_sprintf(filename, MAX_QPATH, "cubemaps/%s/%03d.dds", tr.world->baseName, i); + } + R_SaveDDS(filename, cubemapPixels, r_cubemapSize->integer, r_cubemapSize->integer, 6); ri.Printf(PRINT_ALL, "Saved cubemap %d as %s\n", i, filename); } diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index ed7ece72..70d1dd80 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -23,6 +23,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "tr_local.h" +#define JSON_IMPLEMENTATION +#include "..\qcommon\json.h" +#undef JSON_IMPLEMENTATION + /* Loads and prepares a map file for scene rendering. @@ -2972,6 +2976,78 @@ qboolean R_ParseSpawnVars( char *spawnVarChars, int maxSpawnVarChars, int *numSp return qtrue; } +void R_LoadEnvironmentJson(const char *baseName) +{ + char filename[MAX_QPATH]; + + union { + char *c; + void *v; + } buffer; + char *bufferEnd; + + const char *cubemapArrayJson; + int filelen, i; + + Com_sprintf(filename, MAX_QPATH, "cubemaps/%s/env.json", baseName); + + filelen = ri.FS_ReadFile(filename, &buffer.v); + if (!buffer.c) + return; + bufferEnd = buffer.c + filelen; + + if (JSON_ValueGetType(buffer.c, bufferEnd) != JSONTYPE_OBJECT) + { + ri.Printf(PRINT_ALL, "Bad %s: does not start with a object\n", filename); + ri.FS_FreeFile(buffer.v); + return; + } + + cubemapArrayJson = JSON_ObjectGetNamedValue(buffer.c, bufferEnd, "Cubemaps"); + if (!cubemapArrayJson) + { + ri.Printf(PRINT_ALL, "Bad %s: no Cubemaps\n", filename); + ri.FS_FreeFile(buffer.v); + return; + } + + if (JSON_ValueGetType(cubemapArrayJson, bufferEnd) != JSONTYPE_ARRAY) + { + ri.Printf(PRINT_ALL, "Bad %s: Cubemaps not an array\n", filename); + ri.FS_FreeFile(buffer.v); + return; + } + + tr.numCubemaps = JSON_ArrayGetIndex(cubemapArrayJson, bufferEnd, NULL, 0); + tr.cubemaps = ri.Hunk_Alloc(tr.numCubemaps * sizeof(*tr.cubemaps), h_low); + memset(tr.cubemaps, 0, tr.numCubemaps * sizeof(*tr.cubemaps)); + + for (i = 0; i < tr.numCubemaps; i++) + { + cubemap_t *cubemap = &tr.cubemaps[i]; + const char *cubemapJson, *keyValueJson, *indexes[3]; + int j; + + cubemapJson = JSON_ArrayGetValue(cubemapArrayJson, bufferEnd, i); + + keyValueJson = JSON_ObjectGetNamedValue(cubemapJson, bufferEnd, "Name"); + if (!JSON_ValueGetString(keyValueJson, bufferEnd, cubemap->name, MAX_QPATH)) + cubemap->name[0] = '\0'; + + keyValueJson = JSON_ObjectGetNamedValue(cubemapJson, bufferEnd, "Position"); + JSON_ArrayGetIndex(keyValueJson, bufferEnd, indexes, 3); + for (j = 0; j < 3; j++) + cubemap->origin[j] = JSON_ValueGetFloat(indexes[j], bufferEnd); + + cubemap->parallaxRadius = 1000.0f; + keyValueJson = JSON_ObjectGetNamedValue(cubemapJson, bufferEnd, "Radius"); + if (keyValueJson) + cubemap->parallaxRadius = JSON_ValueGetFloat(keyValueJson, bufferEnd); + } + + ri.FS_FreeFile(buffer.v); +} + void R_LoadCubemapEntities(char *cubemapEntityName) { char spawnVarChars[2048]; @@ -3003,16 +3079,21 @@ void R_LoadCubemapEntities(char *cubemapEntityName) while(R_ParseSpawnVars(spawnVarChars, sizeof(spawnVarChars), &numSpawnVars, spawnVars)) { int i; + char name[MAX_QPATH]; qboolean isCubemap = qfalse; qboolean originSet = qfalse; vec3_t origin; float parallaxRadius = 1000.0f; + name[0] = '\0'; for (i = 0; i < numSpawnVars; i++) { if (!Q_stricmp(spawnVars[i][0], "classname") && !Q_stricmp(spawnVars[i][1], cubemapEntityName)) isCubemap = qtrue; + if (!Q_stricmp(spawnVars[i][0], "name")) + Q_strncpyz(name, spawnVars[i][1], MAX_QPATH); + if (!Q_stricmp(spawnVars[i][0], "origin")) { sscanf(spawnVars[i][1], "%f %f %f", &origin[0], &origin[1], &origin[2]); @@ -3026,9 +3107,10 @@ void R_LoadCubemapEntities(char *cubemapEntityName) if (isCubemap && originSet) { - //ri.Printf(PRINT_ALL, "cubemap at %f %f %f\n", origin[0], origin[1], origin[2]); - VectorCopy(origin, tr.cubemaps[numCubemaps].origin); - tr.cubemaps[numCubemaps].parallaxRadius = parallaxRadius; + cubemap_t *cubemap = &tr.cubemaps[numCubemaps]; + Q_strncpyz(cubemap->name, name, MAX_QPATH); + VectorCopy(origin, cubemap->origin); + cubemap->parallaxRadius = parallaxRadius; numCubemaps++; } } @@ -3419,7 +3501,14 @@ void RE_LoadWorldMap( const char *name ) { // load cubemaps if (r_cubeMapping->integer) { - R_LoadCubemapEntities("misc_cubemap"); + // Try loading an env.json file first + R_LoadEnvironmentJson(s_worldData.baseName); + + if (!tr.numCubemaps) + { + R_LoadCubemapEntities("misc_cubemap"); + } + if (!tr.numCubemaps) { // use deathmatch spawn points as cubemaps diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 17b13749..00d882cc 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -59,6 +59,7 @@ typedef unsigned int glIndex_t; #define USE_OVERBRIGHT typedef struct cubemap_s { + char name[MAX_QPATH]; vec3_t origin; float parallaxRadius; image_t *image; diff --git a/code/renderergl2/tr_main.c b/code/renderergl2/tr_main.c index 6c78930b..bd27018b 100644 --- a/code/renderergl2/tr_main.c +++ b/code/renderergl2/tr_main.c @@ -2936,7 +2936,7 @@ void R_RenderCubemapSide( int cubemapIndex, int cubemapSide, qboolean subscene ) // only print message for first side if (directed[0] + directed[1] + directed[2] == 0 && cubemapSide == 0) { - ri.Printf(PRINT_ALL, "cubemap %d (%f, %f, %f) is outside the lightgrid!\n", cubemapIndex, tr.refdef.vieworg[0], tr.refdef.vieworg[1], tr.refdef.vieworg[2]); + ri.Printf(PRINT_ALL, "cubemap %d %s (%f, %f, %f) is outside the lightgrid!\n", cubemapIndex, tr.cubemaps[cubemapIndex].name, tr.refdef.vieworg[0], tr.refdef.vieworg[1], tr.refdef.vieworg[2]); } } From 0f6f2be155ad2750498ed69c0018602fb5282f63 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 12 Feb 2016 18:34:31 -0800 Subject: [PATCH 099/480] OpenGL2: Typos. --- code/renderergl2/tr_bsp.c | 2 +- code/renderergl2/tr_scene.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index 70d1dd80..78728f81 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -24,7 +24,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "tr_local.h" #define JSON_IMPLEMENTATION -#include "..\qcommon\json.h" +#include "../qcommon/json.h" #undef JSON_IMPLEMENTATION /* diff --git a/code/renderergl2/tr_scene.c b/code/renderergl2/tr_scene.c index 11ef0e89..410f81e4 100644 --- a/code/renderergl2/tr_scene.c +++ b/code/renderergl2/tr_scene.c @@ -336,7 +336,7 @@ void RE_BeginScene(const refdef_t *fd) else { #if defined(USE_OVERBRIGHT) - float scale = (1 << (r_mapOverBrightBits->integer - tr.overbrightBits)) / 255.0f;; + float scale = (1 << (r_mapOverBrightBits->integer - tr.overbrightBits)) / 255.0f; #else float scale = (1 << r_mapOverBrightBits->integer) / 255.0f; #endif From d11cfc88d50efdda6618282a0f1aed1c9c4c4c93 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 17 Feb 2016 19:49:21 -0800 Subject: [PATCH 100/480] OpenGL2: Fix some GL errors and no sun shadows on older OpenGLs. --- code/renderergl2/tr_dsa.c | 2 +- code/renderergl2/tr_fbo.c | 8 ++++++-- code/renderergl2/tr_image.c | 4 +--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/code/renderergl2/tr_dsa.c b/code/renderergl2/tr_dsa.c index a766263a..9cd481bd 100644 --- a/code/renderergl2/tr_dsa.c +++ b/code/renderergl2/tr_dsa.c @@ -210,7 +210,7 @@ void GL_BindNullFramebuffers() qglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); glDsaState.drawFramebuffer = glDsaState.readFramebuffer = 0; qglBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); - glDsaState.readFramebuffer = 0; + glDsaState.renderbuffer = 0; } void GL_BindFramebuffer(GLenum target, GLuint framebuffer) diff --git a/code/renderergl2/tr_fbo.c b/code/renderergl2/tr_fbo.c index 59b17032..12293766 100644 --- a/code/renderergl2/tr_fbo.c +++ b/code/renderergl2/tr_fbo.c @@ -251,7 +251,7 @@ FBO_Init void FBO_Init(void) { int i; - int hdrFormat, multisample; + int hdrFormat, multisample = 0; ri.Printf(PRINT_ALL, "------- FBO_Init -------\n"); @@ -268,7 +268,8 @@ void FBO_Init(void) if (r_hdr->integer && glRefConfig.framebufferObject && glRefConfig.textureFloat) hdrFormat = GL_RGBA16F_ARB; - qglGetIntegerv(GL_MAX_SAMPLES_EXT, &multisample); + if (glRefConfig.framebufferMultisample) + qglGetIntegerv(GL_MAX_SAMPLES_EXT, &multisample); if (r_ext_framebuffer_multisample->integer < multisample) multisample = r_ext_framebuffer_multisample->integer; @@ -334,6 +335,9 @@ void FBO_Init(void) for ( i = 0; i < 4; i++) { tr.sunShadowFbo[i] = FBO_Create("_sunshadowmap", tr.sunShadowDepthImage[i]->width, tr.sunShadowDepthImage[i]->height); + // FIXME: this next line wastes 16mb with 4x1024x1024 sun shadow maps, skip if OpenGL 4.3+ or ARB_framebuffer_no_attachments + // This at least gets sun shadows working on older GPUs (Intel) + FBO_CreateBuffer(tr.sunShadowFbo[i], GL_RGBA8, 0, 0); FBO_AttachImage(tr.sunShadowFbo[i], tr.sunShadowDepthImage[i], GL_DEPTH_ATTACHMENT_EXT, 0); R_CheckFBO(tr.sunShadowFbo[i]); } diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index 69ddba19..2f5798ac 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -115,7 +115,7 @@ void GL_TextureMode( const char *string ) { // change all the existing mipmap texture objects for ( i = 0 ; i < tr.numImages ; i++ ) { glt = tr.images[ i ]; - if ( glt->flags & IMGFLAG_MIPMAP ) { + if ( glt->flags & IMGFLAG_MIPMAP && !(glt->flags & IMGFLAG_CUBEMAP)) { qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); } @@ -2817,8 +2817,6 @@ void R_CreateBuiltinImages( void ) { for ( x = 0; x < 4; x++) { tr.sunShadowDepthImage[x] = R_CreateImage(va("*sunshadowdepth%i", x), NULL, r_shadowMapSize->integer, r_shadowMapSize->integer, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB); - qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); - qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); } From a331637745fb82266f3627fb438f2d58d53e366c Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 17 Feb 2016 20:06:18 -0800 Subject: [PATCH 101/480] OpenGL2: Shader optimization, and add dither to tonemap. --- code/renderergl2/glsl/calclevels4x_fp.glsl | 2 +- code/renderergl2/glsl/lightall_fp.glsl | 106 ++++++++------------- code/renderergl2/glsl/lightall_vp.glsl | 21 +++- code/renderergl2/glsl/tonemap_fp.glsl | 7 +- code/renderergl2/tr_shade.c | 14 ++- 5 files changed, 76 insertions(+), 74 deletions(-) diff --git a/code/renderergl2/glsl/calclevels4x_fp.glsl b/code/renderergl2/glsl/calclevels4x_fp.glsl index 0d298b62..8246c4b3 100644 --- a/code/renderergl2/glsl/calclevels4x_fp.glsl +++ b/code/renderergl2/glsl/calclevels4x_fp.glsl @@ -15,7 +15,7 @@ vec3 GetValues(vec2 offset, vec3 current) #ifdef FIRST_PASS #if defined(USE_PBR) - minAvgMax = pow(minAvgMax, vec3(2.2)); + minAvgMax *= minAvgMax; #endif float lumi = max(dot(LUMINANCE_VECTOR, minAvgMax), 0.000001); diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index eb8ba900..6a0a5155 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -29,11 +29,6 @@ uniform samplerCube u_CubeMap; uniform vec4 u_EnableTextures; #endif -#if defined(USE_LIGHT_VECTOR) && !defined(USE_FAST_LIGHT) -uniform vec3 u_DirectedLight; -uniform vec3 u_AmbientLight; -#endif - #if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP) uniform vec3 u_PrimaryLightColor; uniform vec3 u_PrimaryLightAmbient; @@ -53,6 +48,9 @@ uniform vec4 u_CubeMapInfo; varying vec4 var_TexCoords; varying vec4 var_Color; +#if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)) +varying vec4 var_ColorAmbient; +#endif #if (defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)) #if defined(USE_VERT_TANGENT_SPACE) @@ -150,7 +148,7 @@ float RayIntersectDisplaceMap(vec2 dp, vec2 ds, sampler2D normalMap) } #endif -vec3 CalcDiffuse(vec3 diffuseAlbedo, float EH, float NH, float roughness) +vec3 CalcDiffuse(vec3 diffuseAlbedo, float NH, float EH, float roughness) { #if defined(USE_BURLEY) // modified from https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf @@ -171,7 +169,7 @@ vec3 EnvironmentBRDF(float roughness, float NE, vec3 specular) return vec3(v) + specular; } -vec3 CalcSpecular(vec3 specular, float NH, float NL, float NE, float EH, float roughness) +vec3 CalcSpecular(vec3 specular, float NH, float EH, float roughness) { // from http://community.arm.com/servlet/JiveServlet/download/96891546-19496/siggraph2015-mmg-renaldas-slides.pdf float rr = roughness*roughness; @@ -220,7 +218,7 @@ mat3 cotangent_frame( vec3 N, vec3 p, vec2 uv ) void main() { - vec3 viewDir, lightColor, ambientColor; + vec3 viewDir, lightColor, ambientColor, reflectance; vec3 L, N, E, H; float NL, NH, NE, EH, attenuation; @@ -232,21 +230,20 @@ void main() mat3 tangentToWorld = cotangent_frame(var_Normal, -var_ViewDir, var_TexCoords.xy); viewDir = var_ViewDir; #endif - E = normalize(viewDir); - - L = var_LightDir.xyz; - #if defined(USE_DELUXEMAP) - L += (texture2D(u_DeluxeMap, var_TexCoords.zw).xyz - vec3(0.5)) * u_EnableTextures.y; - #endif - float sqrLightDist = dot(L, L); #endif + lightColor = var_Color.rgb; + #if defined(USE_LIGHTMAP) vec4 lightmapColor = texture2D(u_LightMap, var_TexCoords.zw); #if defined(RGBM_LIGHTMAP) lightmapColor.rgb *= lightmapColor.a; #endif + #if defined(USE_PBR) && !defined(USE_FAST_LIGHT) + lightmapColor.rgb *= lightmapColor.rgb; + #endif + lightColor *= lightmapColor.rgb; #endif vec2 texCoords = var_TexCoords.xy; @@ -262,23 +259,17 @@ void main() vec4 diffuse = texture2D(u_DiffuseMap, texCoords); #if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) - #if defined(USE_LIGHTMAP) - lightColor = lightmapColor.rgb * var_Color.rgb; - ambientColor = vec3(0.0); - attenuation = 1.0; - #elif defined(USE_LIGHT_VECTOR) - lightColor = u_DirectedLight * var_Color.rgb; - ambientColor = u_AmbientLight * var_Color.rgb; - attenuation = CalcLightAttenuation(float(var_LightDir.w > 0.0), var_LightDir.w / sqrLightDist); - #elif defined(USE_LIGHT_VERTEX) - lightColor = var_Color.rgb; - ambientColor = vec3(0.0); - attenuation = 1.0; + L = var_LightDir.xyz; + #if defined(USE_DELUXEMAP) + L += (texture2D(u_DeluxeMap, var_TexCoords.zw).xyz - vec3(0.5)) * u_EnableTextures.y; #endif + float sqrLightDist = dot(L, L); + L /= sqrt(sqrLightDist); - #if defined(USE_PBR) - lightColor = pow(lightColor, vec3(2.2)); - ambientColor = pow(ambientColor, vec3(2.2)); + #if defined(USE_LIGHT_VECTOR) + attenuation = CalcLightAttenuation(float(var_LightDir.w > 0.0), var_LightDir.w / sqrLightDist); + #else + attenuation = 1.0; #endif #if defined(USE_NORMALMAP) @@ -295,21 +286,20 @@ void main() #endif N = normalize(N); - L /= sqrt(sqrLightDist); #if defined(USE_SHADOWMAP) vec2 shadowTex = gl_FragCoord.xy * r_FBufScale; float shadowValue = texture2D(u_ShadowMap, shadowTex).r; // surfaces not facing the light are always shadowed - shadowValue *= float(dot(var_Normal.xyz, var_PrimaryLightDir.xyz) > 0.0); + shadowValue *= clamp(dot(var_Normal.xyz, var_PrimaryLightDir.xyz), 0.0, 1.0); #if defined(SHADOWMAP_MODULATE) lightColor *= shadowValue * (1.0 - u_PrimaryLightAmbient.r) + u_PrimaryLightAmbient.r; #endif #endif - #if defined(USE_LIGHTMAP) || defined(USE_LIGHT_VERTEX) + #if !defined(USE_LIGHT_VECTOR) ambientColor = lightColor; float surfNL = clamp(dot(var_Normal.xyz, L), 0.0, 1.0); @@ -320,9 +310,9 @@ void main() // Recover any unused light as ambient, in case attenuation is over 4x or // light is below the surface ambientColor = max(ambientColor - lightColor * surfNL, vec3(0.0)); + #else + ambientColor = var_ColorAmbient.rgb; #endif - - vec3 reflectance; NL = clamp(dot(N, L), 0.0, 1.0); NE = clamp(dot(N, E), 0.0, 1.0); @@ -332,32 +322,30 @@ void main() #else vec4 specular = vec4(1.0); #endif - specular *= u_SpecularScale; #if defined(USE_PBR) - diffuse.rgb = pow(diffuse.rgb, vec3(2.2)); + diffuse.rgb *= diffuse.rgb; #endif - float gloss = specular.a; #if defined(USE_PBR) + // diffuse rgb is base color + // specular red is smoothness + // specular green is metallicness float roughness = 1.0 - specular.r; + specular.rgb = specular.g * diffuse.rgb + vec3(0.04 - 0.04 * specular.g); + diffuse.rgb *= 1.0 - specular.g; #else - float roughness = exp2(-3.0 * gloss); - #endif + // diffuse rgb is diffuse + // specular rgb is specular reflectance at normal incidence + // specular alpha is gloss + float roughness = exp2(-3.0 * specular.a); - #if defined(USE_PBR) - // diffuse is actually base color, and green of specular is metallicness - float metallic = specular.g; - - specular.rgb = metallic * diffuse.rgb + vec3(0.04 - 0.04 * metallic); - diffuse.rgb *= 1.0 - metallic; - #else // adjust diffuse by specular reflectance, to maintain energy conservation diffuse.rgb *= vec3(1.0) - specular.rgb; #endif - reflectance = CalcDiffuse(diffuse.rgb, EH, NH, roughness); + reflectance = CalcDiffuse(diffuse.rgb, NH, EH, roughness); gl_FragColor.rgb = lightColor * reflectance * (attenuation * NL); gl_FragColor.rgb += ambientColor * diffuse.rgb; @@ -371,11 +359,7 @@ void main() // from http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/ vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir; - #if defined(USE_PBR) vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 * roughness).rgb * u_EnableTextures.w; - #else - vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 - gloss * 7.0).rgb * u_EnableTextures.w; - #endif // normalize cubemap based on lowest mip (~diffuse) // multiplying cubemap values by lighting below depends on either this or the cubemap being normalized at generation @@ -383,7 +367,7 @@ void main() //cubeLightColor /= dot(cubeLightDiffuse, vec3(0.2125, 0.7154, 0.0721)); #if defined(USE_PBR) - cubeLightColor = pow(cubeLightColor, vec3(2.2)); + cubeLightColor *= cubeLightColor; #endif // multiply cubemap values by lighting @@ -404,24 +388,19 @@ void main() //L2 /= sqrt(sqrLightDist); NL2 = clamp(dot(N, L2), 0.0, 1.0); - H2 = normalize(L2 + E); EH2 = clamp(dot(E, H2), 0.0, 1.0); NH2 = clamp(dot(N, H2), 0.0, 1.0); - reflectance = CalcSpecular(specular.rgb, NH2, NL2, NE, EH2, roughness); + reflectance = CalcSpecular(specular.rgb, NH2, EH2, roughness); // bit of a hack, with modulated shadowmaps, ignore diffuse #if !defined(SHADOWMAP_MODULATE) - reflectance += CalcDiffuse(diffuse.rgb, EH2, NH2, roughness); + reflectance += CalcDiffuse(diffuse.rgb, NH2, EH2, roughness); #endif lightColor = u_PrimaryLightColor; - #if defined(USE_PBR) - lightColor = pow(lightColor, vec3(2.2)); - #endif - #if defined(USE_SHADOWMAP) lightColor *= shadowValue; #endif @@ -433,15 +412,10 @@ void main() #endif #if defined(USE_PBR) - gl_FragColor.rgb = pow(gl_FragColor.rgb, vec3(1.0 / 2.2)); + gl_FragColor.rgb = sqrt(gl_FragColor.rgb); #endif #else - lightColor = var_Color.rgb; - - #if defined(USE_LIGHTMAP) - lightColor *= lightmapColor.rgb; - #endif gl_FragColor.rgb = diffuse.rgb * lightColor; diff --git a/code/renderergl2/glsl/lightall_vp.glsl b/code/renderergl2/glsl/lightall_vp.glsl index 59051d7c..783885e9 100644 --- a/code/renderergl2/glsl/lightall_vp.glsl +++ b/code/renderergl2/glsl/lightall_vp.glsl @@ -57,10 +57,8 @@ uniform float u_VertexLerp; #if defined(USE_LIGHT_VECTOR) uniform vec4 u_LightOrigin; uniform float u_LightRadius; - #if defined(USE_FAST_LIGHT) uniform vec3 u_DirectedLight; uniform vec3 u_AmbientLight; - #endif #endif #if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP) @@ -71,6 +69,9 @@ uniform float u_PrimaryLightRadius; varying vec4 var_TexCoords; varying vec4 var_Color; +#if defined(USE_LIGHT_VECTOR) && !defined(USE_FAST_LIGHT) +varying vec4 var_ColorAmbient; +#endif #if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) #if defined(USE_VERT_TANGENT_SPACE) @@ -208,12 +209,24 @@ void main() var_Color = u_VertColor * attr_Color + u_BaseColor; -#if defined(USE_LIGHT_VECTOR) && defined(USE_FAST_LIGHT) +#if defined(USE_LIGHT_VECTOR) + #if defined(USE_FAST_LIGHT) float sqrLightDist = dot(L, L); - float attenuation = CalcLightAttenuation(u_LightOrigin.w, u_LightRadius * u_LightRadius / sqrLightDist); float NL = clamp(dot(normalize(normal), L) / sqrt(sqrLightDist), 0.0, 1.0); + float attenuation = CalcLightAttenuation(u_LightOrigin.w, u_LightRadius * u_LightRadius / sqrLightDist); var_Color.rgb *= u_DirectedLight * (attenuation * NL) + u_AmbientLight; + #else + var_ColorAmbient.rgb = u_AmbientLight * var_Color.rgb; + var_Color.rgb *= u_DirectedLight; + #if defined(USE_PBR) + var_ColorAmbient.rgb *= var_ColorAmbient.rgb; + #endif + #endif +#endif + +#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) && defined(USE_PBR) + var_Color.rgb *= var_Color.rgb; #endif #if defined(USE_PRIMARY_LIGHT) || defined(USE_SHADOWMAP) diff --git a/code/renderergl2/glsl/tonemap_fp.glsl b/code/renderergl2/glsl/tonemap_fp.glsl index 5d8841d6..9e24e24a 100644 --- a/code/renderergl2/glsl/tonemap_fp.glsl +++ b/code/renderergl2/glsl/tonemap_fp.glsl @@ -29,7 +29,7 @@ void main() vec4 color = texture2D(u_TextureMap, var_TexCoords) * u_Color; #if defined(USE_PBR) - color.rgb = pow(color.rgb, vec3(2.2)); + color.rgb *= color.rgb; #endif vec3 minAvgMax = texture2D(u_LevelsMap, var_TexCoords).rgb; @@ -47,8 +47,11 @@ void main() color.rgb = clamp(color.rgb * var_InvWhite, 0.0, 1.0); #if defined(USE_PBR) - color.rgb = pow(color.rgb, vec3(1.0 / 2.2)); + color.rgb = sqrt(color.rgb); #endif + // add a bit of dither to reduce banding + color.rgb += vec3(1.0/510.0 * mod(gl_FragCoord.x + gl_FragCoord.y, 2.0) - 1.0/1020.0); + gl_FragColor = color; } diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index 5e59c80f..ca2a02b6 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -1273,7 +1273,19 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) { GL_BindToTMU(tr.screenShadowImage, TB_SHADOWMAP); GLSL_SetUniformVec3(sp, UNIFORM_PRIMARYLIGHTAMBIENT, backEnd.refdef.sunAmbCol); - GLSL_SetUniformVec3(sp, UNIFORM_PRIMARYLIGHTCOLOR, backEnd.refdef.sunCol); + if (r_pbr->integer) + { + vec3_t color; + + color[0] = backEnd.refdef.sunCol[0] * backEnd.refdef.sunCol[0]; + color[1] = backEnd.refdef.sunCol[1] * backEnd.refdef.sunCol[1]; + color[2] = backEnd.refdef.sunCol[2] * backEnd.refdef.sunCol[2]; + GLSL_SetUniformVec3(sp, UNIFORM_PRIMARYLIGHTCOLOR, color); + } + else + { + GLSL_SetUniformVec3(sp, UNIFORM_PRIMARYLIGHTCOLOR, backEnd.refdef.sunCol); + } GLSL_SetUniformVec4(sp, UNIFORM_PRIMARYLIGHTORIGIN, backEnd.refdef.sunDir); } From 90d6f941f805ba5dcc5179b0218b0e70bef7d1ce Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 7 Mar 2016 02:27:03 -0800 Subject: [PATCH 102/480] OpenGL2: Add r_shadowBlur. --- code/renderergl2/glsl/depthblur_fp.glsl | 20 +++++-- code/renderergl2/tr_backend.c | 74 +++++++++++++------------ code/renderergl2/tr_fbo.c | 8 +++ code/renderergl2/tr_image.c | 7 ++- code/renderergl2/tr_init.c | 4 +- code/renderergl2/tr_local.h | 3 + 6 files changed, 73 insertions(+), 43 deletions(-) diff --git a/code/renderergl2/glsl/depthblur_fp.glsl b/code/renderergl2/glsl/depthblur_fp.glsl index 93895b4e..15f7be27 100644 --- a/code/renderergl2/glsl/depthblur_fp.glsl +++ b/code/renderergl2/glsl/depthblur_fp.glsl @@ -1,13 +1,13 @@ uniform sampler2D u_ScreenImageMap; uniform sampler2D u_ScreenDepthMap; -uniform vec4 u_ViewInfo; // zfar / znear, zfar +uniform vec4 u_ViewInfo; // zfar / znear, zfar, 1/width, 1/height varying vec2 var_ScreenTex; //float gauss[5] = float[5](0.30, 0.23, 0.097, 0.024, 0.0033); float gauss[4] = float[4](0.40, 0.24, 0.054, 0.0044); //float gauss[3] = float[3](0.60, 0.19, 0.0066); -#define GAUSS_SIZE 4 +#define BLUR_SIZE 4 float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNear) { @@ -17,7 +17,7 @@ float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNea vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFarDivZNear, float zFar) { - float scale = 1.0 / 256.0; + vec2 scale = u_ViewInfo.zw; #if defined(USE_HORIZONTAL_BLUR) vec2 direction = vec2(1.0, 0.0) * scale; @@ -27,22 +27,32 @@ vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFa float depthCenter = zFar * getLinearDepth(depthMap, tex, zFarDivZNear); vec2 centerSlope = vec2(dFdx(depthCenter), dFdy(depthCenter)) / vec2(dFdx(tex.x), dFdy(tex.y)); - + +#if defined(USE_GAUSS) vec4 result = texture2D(imageMap, tex) * gauss[0]; float total = gauss[0]; +#else + vec4 result = texture2D(imageMap, tex); + float total = 1.0; +#endif int i, j; for (i = 0; i < 2; i++) { - for (j = 1; j < GAUSS_SIZE; j++) + for (j = 1; j < BLUR_SIZE; j++) { vec2 offset = direction * j; float depthSample = zFar * getLinearDepth(depthMap, tex + offset, zFarDivZNear); float depthExpected = depthCenter + dot(centerSlope, offset); if(abs(depthSample - depthExpected) < 5.0) { +#if defined(USE_GAUSS) result += texture2D(imageMap, tex + offset) * gauss[j]; total += gauss[j]; +#else + result += texture2D(imageMap, tex + offset); + total += 1.0; +#endif } } diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index c02ba26f..985b8f9f 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -956,6 +956,9 @@ const void *RB_DrawSurfs( const void *data ) { if (glRefConfig.framebufferObject && !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL) && (r_depthPrepass->integer || (backEnd.viewParms.flags & VPF_DEPTHSHADOW))) { FBO_t *oldFbo = glState.currentFBO; + vec4_t viewInfo; + + VectorSet4(viewInfo, backEnd.viewParms.zFar / r_znear->value, backEnd.viewParms.zFar, 0.0, 0.0); backEnd.depthFill = qtrue; qglColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); @@ -1042,15 +1045,12 @@ const void *RB_DrawSurfs( const void *data ) { GLSL_SetUniformVec3(&tr.shadowmaskShader, UNIFORM_VIEWORIGIN, backEnd.refdef.vieworg); { - vec4_t viewInfo; vec3_t viewVector; float zmax = backEnd.viewParms.zFar; float ymax = zmax * tan(backEnd.viewParms.fovY * M_PI / 360.0f); float xmax = zmax * tan(backEnd.viewParms.fovX * M_PI / 360.0f); - float zmin = r_znear->value; - VectorScale(backEnd.refdef.viewaxis[0], zmax, viewVector); GLSL_SetUniformVec3(&tr.shadowmaskShader, UNIFORM_VIEWFORWARD, viewVector); VectorScale(backEnd.refdef.viewaxis[1], xmax, viewVector); @@ -1058,13 +1058,39 @@ const void *RB_DrawSurfs( const void *data ) { VectorScale(backEnd.refdef.viewaxis[2], ymax, viewVector); GLSL_SetUniformVec3(&tr.shadowmaskShader, UNIFORM_VIEWUP, viewVector); - VectorSet4(viewInfo, zmax / zmin, zmax, 0.0, 0.0); - GLSL_SetUniformVec4(&tr.shadowmaskShader, UNIFORM_VIEWINFO, viewInfo); } - RB_InstantQuad2(quadVerts, texCoords); //, color, shaderProgram, invTexRes); + + if (r_shadowBlur->integer) + { + viewInfo[2] = 1.0f / (float)(tr.screenScratchFbo->width); + viewInfo[3] = 1.0f / (float)(tr.screenScratchFbo->height); + + FBO_Bind(tr.screenScratchFbo); + + GLSL_BindProgram(&tr.depthBlurShader[0]); + + GL_BindToTMU(tr.screenShadowImage, TB_COLORMAP); + GL_BindToTMU(tr.hdrDepthImage, TB_LIGHTMAP); + + GLSL_SetUniformVec4(&tr.depthBlurShader[0], UNIFORM_VIEWINFO, viewInfo); + + RB_InstantQuad2(quadVerts, texCoords); + + + FBO_Bind(tr.screenShadowFbo); + + GLSL_BindProgram(&tr.depthBlurShader[1]); + + GL_BindToTMU(tr.screenScratchImage, TB_COLORMAP); + GL_BindToTMU(tr.hdrDepthImage, TB_LIGHTMAP); + + GLSL_SetUniformVec4(&tr.depthBlurShader[1], UNIFORM_VIEWINFO, viewInfo); + + RB_InstantQuad2(quadVerts, texCoords); + } } if (r_ssao->integer) @@ -1072,6 +1098,9 @@ const void *RB_DrawSurfs( const void *data ) { vec4_t quadVerts[4]; vec2_t texCoords[4]; + viewInfo[2] = 1.0f / (float)(tr.quarterImage[0]->width); + viewInfo[3] = 1.0f / (float)(tr.quarterImage[0]->height); + FBO_Bind(tr.quarterFbo[0]); qglViewport(0, 0, tr.quarterFbo[0]->width, tr.quarterFbo[0]->height); @@ -1093,16 +1122,7 @@ const void *RB_DrawSurfs( const void *data ) { GL_BindToTMU(tr.hdrDepthImage, TB_COLORMAP); - { - vec4_t viewInfo; - - float zmax = backEnd.viewParms.zFar; - float zmin = r_znear->value; - - VectorSet4(viewInfo, zmax / zmin, zmax, 0.0, 0.0); - - GLSL_SetUniformVec4(&tr.ssaoShader, UNIFORM_VIEWINFO, viewInfo); - } + GLSL_SetUniformVec4(&tr.ssaoShader, UNIFORM_VIEWINFO, viewInfo); RB_InstantQuad2(quadVerts, texCoords); //, color, shaderProgram, invTexRes); @@ -1117,16 +1137,7 @@ const void *RB_DrawSurfs( const void *data ) { GL_BindToTMU(tr.quarterImage[0], TB_COLORMAP); GL_BindToTMU(tr.hdrDepthImage, TB_LIGHTMAP); - { - vec4_t viewInfo; - - float zmax = backEnd.viewParms.zFar; - float zmin = r_znear->value; - - VectorSet4(viewInfo, zmax / zmin, zmax, 0.0, 0.0); - - GLSL_SetUniformVec4(&tr.depthBlurShader[0], UNIFORM_VIEWINFO, viewInfo); - } + GLSL_SetUniformVec4(&tr.depthBlurShader[0], UNIFORM_VIEWINFO, viewInfo); RB_InstantQuad2(quadVerts, texCoords); //, color, shaderProgram, invTexRes); @@ -1141,16 +1152,7 @@ const void *RB_DrawSurfs( const void *data ) { GL_BindToTMU(tr.quarterImage[1], TB_COLORMAP); GL_BindToTMU(tr.hdrDepthImage, TB_LIGHTMAP); - { - vec4_t viewInfo; - - float zmax = backEnd.viewParms.zFar; - float zmin = r_znear->value; - - VectorSet4(viewInfo, zmax / zmin, zmax, 0.0, 0.0); - - GLSL_SetUniformVec4(&tr.depthBlurShader[1], UNIFORM_VIEWINFO, viewInfo); - } + GLSL_SetUniformVec4(&tr.depthBlurShader[1], UNIFORM_VIEWINFO, viewInfo); RB_InstantQuad2(quadVerts, texCoords); //, color, shaderProgram, invTexRes); diff --git a/code/renderergl2/tr_fbo.c b/code/renderergl2/tr_fbo.c index 12293766..80d59f62 100644 --- a/code/renderergl2/tr_fbo.c +++ b/code/renderergl2/tr_fbo.c @@ -310,6 +310,14 @@ void FBO_Init(void) qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); } + if (r_shadowBlur->integer) + { + tr.screenScratchFbo = FBO_Create("screenScratch", tr.screenScratchImage->width, tr.screenScratchImage->height); + FBO_AttachImage(tr.screenScratchFbo, tr.screenScratchImage, GL_COLOR_ATTACHMENT0_EXT, 0); + FBO_AttachImage(tr.screenScratchFbo, tr.renderDepthImage, GL_DEPTH_ATTACHMENT_EXT, 0); + R_CheckFBO(tr.screenScratchFbo); + } + if (r_drawSunRays->integer) { tr.sunRaysFbo = FBO_Create("_sunRays", tr.renderDepthImage->width, tr.renderDepthImage->height); diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index 2f5798ac..7f8f2460 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -2754,6 +2754,12 @@ void R_CreateBuiltinImages( void ) { tr.renderImage = R_CreateImage("_render", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, hdrFormat); + if (r_shadowBlur->integer) + tr.screenScratchImage = R_CreateImage("screenScratch", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, rgbFormat); + + if (r_shadowBlur->integer || r_ssao->integer) + tr.hdrDepthImage = R_CreateImage("*hdrDepth", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_INTENSITY32F_ARB); + if (r_drawSunRays->integer) tr.sunRaysImage = R_CreateImage("*sunRays", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, rgbFormat); @@ -2801,7 +2807,6 @@ void R_CreateBuiltinImages( void ) { if (r_ssao->integer) { tr.screenSsaoImage = R_CreateImage("*screenSsao", NULL, width / 2, height / 2, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_RGBA8); - tr.hdrDepthImage = R_CreateImage("*hdrDepth", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_INTENSITY32F_ARB); } if (r_shadows->integer == 4) diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 282ce926..91110758 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -162,6 +162,7 @@ cvar_t *r_sunlightMode; cvar_t *r_drawSunRays; cvar_t *r_sunShadows; cvar_t *r_shadowFilter; +cvar_t *r_shadowBlur; cvar_t *r_shadowMapSize; cvar_t *r_shadowCascadeZNear; cvar_t *r_shadowCascadeZFar; @@ -1252,7 +1253,8 @@ void R_Register( void ) r_sunShadows = ri.Cvar_Get( "r_sunShadows", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_shadowFilter = ri.Cvar_Get( "r_shadowFilter", "1", CVAR_ARCHIVE | CVAR_LATCH ); - r_shadowMapSize = ri.Cvar_Get( "r_shadowMapSize", "1024", CVAR_ARCHIVE | CVAR_LATCH ); + r_shadowBlur = ri.Cvar_Get("r_shadowBlur", "0", CVAR_ARCHIVE | CVAR_LATCH); + r_shadowMapSize = ri.Cvar_Get("r_shadowMapSize", "1024", CVAR_ARCHIVE | CVAR_LATCH); r_shadowCascadeZNear = ri.Cvar_Get( "r_shadowCascadeZNear", "8", CVAR_ARCHIVE | CVAR_LATCH ); r_shadowCascadeZFar = ri.Cvar_Get( "r_shadowCascadeZFar", "1024", CVAR_ARCHIVE | CVAR_LATCH ); r_shadowCascadeZBias = ri.Cvar_Get( "r_shadowCascadeZBias", "0", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 00d882cc..b139cba2 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1520,6 +1520,7 @@ typedef struct { image_t *sunRaysImage; image_t *renderDepthImage; image_t *pshadowMaps[MAX_DRAWN_PSHADOWS]; + image_t *screenScratchImage; image_t *textureScratchImage[2]; image_t *quarterImage[2]; image_t *calcLevelsImage; @@ -1538,6 +1539,7 @@ typedef struct { FBO_t *sunRaysFbo; FBO_t *depthFbo; FBO_t *pshadowFbos[MAX_DRAWN_PSHADOWS]; + FBO_t *screenScratchFbo; FBO_t *textureScratchFbo[2]; FBO_t *quarterFbo[2]; FBO_t *calcLevelsFbo; @@ -1807,6 +1809,7 @@ extern cvar_t *r_sunlightMode; extern cvar_t *r_drawSunRays; extern cvar_t *r_sunShadows; extern cvar_t *r_shadowFilter; +extern cvar_t *r_shadowBlur; extern cvar_t *r_shadowMapSize; extern cvar_t *r_shadowCascadeZNear; extern cvar_t *r_shadowCascadeZFar; From 5738d09969d5464fec29c3145fc2826ac5ce1e4f Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 7 Mar 2016 03:30:16 -0800 Subject: [PATCH 103/480] OpenGL2: Add r_glossType. --- code/renderergl2/glsl/lightall_fp.glsl | 14 ++++++++++++-- code/renderergl2/tr_glsl.c | 17 +++++++++++++++++ code/renderergl2/tr_init.c | 2 ++ code/renderergl2/tr_local.h | 1 + 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index 6a0a5155..8edbebda 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -332,19 +332,29 @@ void main() // diffuse rgb is base color // specular red is smoothness // specular green is metallicness - float roughness = 1.0 - specular.r; + float gloss = specular.r; specular.rgb = specular.g * diffuse.rgb + vec3(0.04 - 0.04 * specular.g); diffuse.rgb *= 1.0 - specular.g; #else // diffuse rgb is diffuse // specular rgb is specular reflectance at normal incidence // specular alpha is gloss - float roughness = exp2(-3.0 * specular.a); + float gloss = specular.a; // adjust diffuse by specular reflectance, to maintain energy conservation diffuse.rgb *= vec3(1.0) - specular.rgb; #endif + #if defined(GLOSS_IS_GLOSS) + float roughness = exp2(-3.0 * gloss); + #elif defined(GLOSS_IS_SMOOTHNESS) + float roughness = 1.0 - gloss; + #elif defined(GLOSS_IS_ROUGHNESS) + float roughness = gloss; + #elif defined(GLOSS_IS_SHININESS) + float roughness = pow(2.0 / (8190.0 * gloss + 2.0), 0.25); + #endif + reflectance = CalcDiffuse(diffuse.rgb, NH, EH, roughness); gl_FragColor.rgb = lightColor * reflectance * (attenuation * NL); diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index f8637a66..b825c19e 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -1057,6 +1057,23 @@ void GLSL_InitGPUShaders(void) if (r_cubeMapping->integer) Q_strcat(extradefines, 1024, "#define USE_CUBEMAP\n"); + + switch (r_glossType->integer) + { + case 0: + default: + Q_strcat(extradefines, 1024, "#define GLOSS_IS_GLOSS\n"); + break; + case 1: + Q_strcat(extradefines, 1024, "#define GLOSS_IS_SMOOTHNESS\n"); + break; + case 2: + Q_strcat(extradefines, 1024, "#define GLOSS_IS_ROUGHNESS\n"); + break; + case 3: + Q_strcat(extradefines, 1024, "#define GLOSS_IS_SHININESS\n"); + break; + } } if (i & LIGHTDEF_USE_SHADOWMAP) diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 91110758..05cd40e7 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -147,6 +147,7 @@ cvar_t *r_baseNormalY; cvar_t *r_baseParallax; cvar_t *r_baseSpecular; cvar_t *r_baseGloss; +cvar_t *r_glossType; cvar_t *r_mergeLightmaps; cvar_t *r_dlightMode; cvar_t *r_pshadowDist; @@ -1236,6 +1237,7 @@ void R_Register( void ) r_baseParallax = ri.Cvar_Get( "r_baseParallax", "0.05", CVAR_ARCHIVE | CVAR_LATCH ); r_baseSpecular = ri.Cvar_Get( "r_baseSpecular", "0.04", CVAR_ARCHIVE | CVAR_LATCH ); r_baseGloss = ri.Cvar_Get( "r_baseGloss", "0.3", CVAR_ARCHIVE | CVAR_LATCH ); + r_glossType = ri.Cvar_Get("r_glossType", "1", CVAR_ARCHIVE | CVAR_LATCH); r_dlightMode = ri.Cvar_Get( "r_dlightMode", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_pshadowDist = ri.Cvar_Get( "r_pshadowDist", "128", CVAR_ARCHIVE ); r_mergeLightmaps = ri.Cvar_Get( "r_mergeLightmaps", "1", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index b139cba2..78e37ecb 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1794,6 +1794,7 @@ extern cvar_t *r_baseNormalY; extern cvar_t *r_baseParallax; extern cvar_t *r_baseSpecular; extern cvar_t *r_baseGloss; +extern cvar_t *r_glossType; extern cvar_t *r_dlightMode; extern cvar_t *r_pshadowDist; extern cvar_t *r_mergeLightmaps; From 65b999446d7a00c12156490e4593b31c2e6b204b Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 8 Mar 2016 18:30:51 -0800 Subject: [PATCH 104/480] OpenGL2: Speedup for SSAO & blur shaders, fix sunlight normals in lightall. --- code/renderergl2/glsl/depthblur_fp.glsl | 46 +++++++++++----------- code/renderergl2/glsl/lightall_fp.glsl | 4 +- code/renderergl2/glsl/ssao_fp.glsl | 52 ++++++++++++------------- code/renderergl2/tr_backend.c | 7 +++- 4 files changed, 56 insertions(+), 53 deletions(-) diff --git a/code/renderergl2/glsl/depthblur_fp.glsl b/code/renderergl2/glsl/depthblur_fp.glsl index 15f7be27..60a261c5 100644 --- a/code/renderergl2/glsl/depthblur_fp.glsl +++ b/code/renderergl2/glsl/depthblur_fp.glsl @@ -11,22 +11,23 @@ float gauss[4] = float[4](0.40, 0.24, 0.054, 0.0044); float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNear) { - float sampleZDivW = texture2D(depthMap, tex).r; - return 1.0 / mix(zFarDivZNear, 1.0, sampleZDivW); + float sampleZDivW = texture2D(depthMap, tex).r; + return 1.0 / mix(zFarDivZNear, 1.0, sampleZDivW); } -vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFarDivZNear, float zFar) +vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFarDivZNear, float zFar, vec2 scale) { - vec2 scale = u_ViewInfo.zw; + float depthCenter = getLinearDepth(depthMap, tex, zFarDivZNear); + //scale /= zFarDivZNear * depthCenter; + //int blurSteps = int(float(BLUR_SIZE) / (zFarDivZNear * depthCenter)); #if defined(USE_HORIZONTAL_BLUR) - vec2 direction = vec2(1.0, 0.0) * scale; + vec2 direction = vec2(scale.x, 0.0); #else // if defined(USE_VERTICAL_BLUR) - vec2 direction = vec2(0.0, 1.0) * scale; + vec2 direction = vec2(0.0, scale.y); #endif - - float depthCenter = zFar * getLinearDepth(depthMap, tex, zFarDivZNear); - vec2 centerSlope = vec2(dFdx(depthCenter), dFdy(depthCenter)) / vec2(dFdx(tex.x), dFdy(tex.y)); + + vec2 slope = vec2(dFdx(depthCenter), dFdy(depthCenter)) / vec2(dFdx(tex.x), dFdy(tex.y)); #if defined(USE_GAUSS) vec4 result = texture2D(imageMap, tex) * gauss[0]; @@ -36,33 +37,32 @@ vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFa float total = 1.0; #endif + float zLimit = 5.0 / zFar; int i, j; for (i = 0; i < 2; i++) { for (j = 1; j < BLUR_SIZE; j++) { vec2 offset = direction * j; - float depthSample = zFar * getLinearDepth(depthMap, tex + offset, zFarDivZNear); - float depthExpected = depthCenter + dot(centerSlope, offset); - if(abs(depthSample - depthExpected) < 5.0) - { + float depthSample = getLinearDepth(depthMap, tex + offset, zFarDivZNear); + float depthExpected = depthCenter + dot(slope, offset); + float useSample = float(abs(depthSample - depthExpected) < zLimit); #if defined(USE_GAUSS) - result += texture2D(imageMap, tex + offset) * gauss[j]; - total += gauss[j]; + result += texture2D(imageMap, tex + offset) * (gauss[j] * useSample); + total += gauss[j] * useSample; #else - result += texture2D(imageMap, tex + offset); - total += 1.0; + result += texture2D(imageMap, tex + offset) * useSample; + total += useSample; #endif - } } - + direction = -direction; - } - + } + return result / total; } void main() -{ - gl_FragColor = depthGaussian1D(u_ScreenImageMap, u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y); +{ + gl_FragColor = depthGaussian1D(u_ScreenImageMap, u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y, u_ViewInfo.zw); } diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index 8edbebda..f16298a3 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -292,7 +292,7 @@ void main() float shadowValue = texture2D(u_ShadowMap, shadowTex).r; // surfaces not facing the light are always shadowed - shadowValue *= clamp(dot(var_Normal.xyz, var_PrimaryLightDir.xyz), 0.0, 1.0); + shadowValue *= clamp(dot(N, var_PrimaryLightDir.xyz), 0.0, 1.0); #if defined(SHADOWMAP_MODULATE) lightColor *= shadowValue * (1.0 - u_PrimaryLightAmbient.r) + u_PrimaryLightAmbient.r; @@ -330,7 +330,7 @@ void main() #if defined(USE_PBR) // diffuse rgb is base color - // specular red is smoothness + // specular red is gloss // specular green is metallicness float gloss = specular.r; specular.rgb = specular.g * diffuse.rgb + vec3(0.04 - 0.04 * specular.g); diff --git a/code/renderergl2/glsl/ssao_fp.glsl b/code/renderergl2/glsl/ssao_fp.glsl index 6263284c..84f18cb7 100644 --- a/code/renderergl2/glsl/ssao_fp.glsl +++ b/code/renderergl2/glsl/ssao_fp.glsl @@ -1,6 +1,6 @@ uniform sampler2D u_ScreenDepthMap; -uniform vec4 u_ViewInfo; // zfar / znear, zfar +uniform vec4 u_ViewInfo; // zfar / znear, zfar, 1/width, 1/height varying vec2 var_ScreenTex; @@ -11,6 +11,7 @@ vec2(0.5784913, -0.002528916), vec2(0.192888, 0.4064181), vec2(-0.6335801, -0.5247476), vec2(-0.5579782, 0.7491854), vec2(0.7320465, 0.6317794) ); +#define NUM_SAMPLES 3 // Input: It uses texture coords as the random number seed. // Output: Random number: [0,1), that is between 0.0 and 0.999999... inclusive. @@ -39,48 +40,47 @@ mat2 randomRotation( const vec2 p ) float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNear) { - float sampleZDivW = texture2D(depthMap, tex).r; - return 1.0 / mix(zFarDivZNear, 1.0, sampleZDivW); + float sampleZDivW = texture2D(depthMap, tex).r; + return 1.0 / mix(zFarDivZNear, 1.0, sampleZDivW); } -float ambientOcclusion(sampler2D depthMap, const vec2 tex, const float zFarDivZNear, const float zFar) +float ambientOcclusion(sampler2D depthMap, const vec2 tex, const float zFarDivZNear, const float zFar, const vec2 scale) { float result = 0; - float sampleZ = zFar * getLinearDepth(depthMap, tex, zFarDivZNear); + float sampleZ = getLinearDepth(depthMap, tex, zFarDivZNear); + float scaleZ = zFarDivZNear * sampleZ; - vec2 expectedSlope = vec2(dFdx(sampleZ), dFdy(sampleZ)) / vec2(dFdx(tex.x), dFdy(tex.y)); - - if (length(expectedSlope) > 5000.0) + vec2 slope = vec2(dFdx(sampleZ), dFdy(sampleZ)) / vec2(dFdx(tex.x), dFdy(tex.y)); + + if (length(slope) * zFar > 5000.0) return 1.0; - - vec2 offsetScale = vec2(3.0 / sampleZ); - + + vec2 offsetScale = vec2(scale * 1024.0 / scaleZ); + mat2 rmat = randomRotation(tex); - + + float invZFar = 1.0 / zFar; + float zLimit = 20.0 * invZFar; int i; - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_SAMPLES; i++) { vec2 offset = rmat * poissonDisc[i] * offsetScale; - float sampleZ2 = zFar * getLinearDepth(depthMap, tex + offset, zFarDivZNear); + float sampleDiff = getLinearDepth(depthMap, tex + offset, zFarDivZNear) - sampleZ; - if (abs(sampleZ - sampleZ2) > 20.0) - result += 1.0; - else - { - float expectedZ = sampleZ + dot(expectedSlope, offset); - result += step(expectedZ - 1.0, sampleZ2); - } + bool s1 = abs(sampleDiff) > zLimit; + bool s2 = sampleDiff + invZFar > dot(slope, offset); + result += float(s1 || s2); } - - result *= 0.33333; - + + result *= 1.0 / float(NUM_SAMPLES); + return result; } void main() { - float result = ambientOcclusion(u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y); - + float result = ambientOcclusion(u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y, u_ViewInfo.zw); + gl_FragColor = vec4(vec3(result), 1.0); } diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index 985b8f9f..3796d4d2 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -1098,8 +1098,8 @@ const void *RB_DrawSurfs( const void *data ) { vec4_t quadVerts[4]; vec2_t texCoords[4]; - viewInfo[2] = 1.0f / (float)(tr.quarterImage[0]->width); - viewInfo[3] = 1.0f / (float)(tr.quarterImage[0]->height); + viewInfo[2] = 1.0f / ((float)(tr.quarterImage[0]->width) * tan(backEnd.viewParms.fovX * M_PI / 360.0f) * 2.0f); + viewInfo[3] = 1.0f / ((float)(tr.quarterImage[0]->height) * tan(backEnd.viewParms.fovY * M_PI / 360.0f) * 2.0f); FBO_Bind(tr.quarterFbo[0]); @@ -1127,6 +1127,9 @@ const void *RB_DrawSurfs( const void *data ) { RB_InstantQuad2(quadVerts, texCoords); //, color, shaderProgram, invTexRes); + viewInfo[2] = 1.0f / (float)(tr.quarterImage[0]->width); + viewInfo[3] = 1.0f / (float)(tr.quarterImage[0]->height); + FBO_Bind(tr.quarterFbo[1]); qglViewport(0, 0, tr.quarterFbo[1]->width, tr.quarterFbo[1]->height); From 934014e237cad2768d76d253d5028b97b96085a0 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 9 Mar 2016 18:03:23 -0800 Subject: [PATCH 105/480] OpenGL2: Create FBOs if target image exists, not cvar settings. --- code/renderergl2/tr_fbo.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/code/renderergl2/tr_fbo.c b/code/renderergl2/tr_fbo.c index 80d59f62..d013748e 100644 --- a/code/renderergl2/tr_fbo.c +++ b/code/renderergl2/tr_fbo.c @@ -310,7 +310,7 @@ void FBO_Init(void) qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); } - if (r_shadowBlur->integer) + if (tr.screenScratchImage) { tr.screenScratchFbo = FBO_Create("screenScratch", tr.screenScratchImage->width, tr.screenScratchImage->height); FBO_AttachImage(tr.screenScratchFbo, tr.screenScratchImage, GL_COLOR_ATTACHMENT0_EXT, 0); @@ -318,7 +318,7 @@ void FBO_Init(void) R_CheckFBO(tr.screenScratchFbo); } - if (r_drawSunRays->integer) + if (tr.sunRaysImage) { tr.sunRaysFbo = FBO_Create("_sunRays", tr.renderDepthImage->width, tr.renderDepthImage->height); FBO_AttachImage(tr.sunRaysFbo, tr.sunRaysImage, GL_COLOR_ATTACHMENT0_EXT, 0); @@ -340,7 +340,7 @@ void FBO_Init(void) if (tr.sunShadowDepthImage[0]) { - for ( i = 0; i < 4; i++) + for (i = 0; i < 4; i++) { tr.sunShadowFbo[i] = FBO_Create("_sunshadowmap", tr.sunShadowDepthImage[i]->width, tr.sunShadowDepthImage[i]->height); // FIXME: this next line wastes 16mb with 4x1024x1024 sun shadow maps, skip if OpenGL 4.3+ or ARB_framebuffer_no_attachments @@ -349,44 +349,58 @@ void FBO_Init(void) FBO_AttachImage(tr.sunShadowFbo[i], tr.sunShadowDepthImage[i], GL_DEPTH_ATTACHMENT_EXT, 0); R_CheckFBO(tr.sunShadowFbo[i]); } + } + if (tr.screenShadowImage) + { tr.screenShadowFbo = FBO_Create("_screenshadow", tr.screenShadowImage->width, tr.screenShadowImage->height); FBO_AttachImage(tr.screenShadowFbo, tr.screenShadowImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.screenShadowFbo); } - for (i = 0; i < 2; i++) + if (tr.textureScratchImage[0]) { - tr.textureScratchFbo[i] = FBO_Create(va("_texturescratch%d", i), tr.textureScratchImage[i]->width, tr.textureScratchImage[i]->height); - FBO_AttachImage(tr.textureScratchFbo[i], tr.textureScratchImage[i], GL_COLOR_ATTACHMENT0_EXT, 0); - R_CheckFBO(tr.textureScratchFbo[i]); + for (i = 0; i < 2; i++) + { + tr.textureScratchFbo[i] = FBO_Create(va("_texturescratch%d", i), tr.textureScratchImage[i]->width, tr.textureScratchImage[i]->height); + FBO_AttachImage(tr.textureScratchFbo[i], tr.textureScratchImage[i], GL_COLOR_ATTACHMENT0_EXT, 0); + R_CheckFBO(tr.textureScratchFbo[i]); + } } + if (tr.calcLevelsImage) { tr.calcLevelsFbo = FBO_Create("_calclevels", tr.calcLevelsImage->width, tr.calcLevelsImage->height); FBO_AttachImage(tr.calcLevelsFbo, tr.calcLevelsImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.calcLevelsFbo); } + if (tr.targetLevelsImage) { tr.targetLevelsFbo = FBO_Create("_targetlevels", tr.targetLevelsImage->width, tr.targetLevelsImage->height); FBO_AttachImage(tr.targetLevelsFbo, tr.targetLevelsImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.targetLevelsFbo); } - for (i = 0; i < 2; i++) + if (tr.quarterImage[0]) { - tr.quarterFbo[i] = FBO_Create(va("_quarter%d", i), tr.quarterImage[i]->width, tr.quarterImage[i]->height); - FBO_AttachImage(tr.quarterFbo[i], tr.quarterImage[i], GL_COLOR_ATTACHMENT0_EXT, 0); - R_CheckFBO(tr.quarterFbo[i]); + for (i = 0; i < 2; i++) + { + tr.quarterFbo[i] = FBO_Create(va("_quarter%d", i), tr.quarterImage[i]->width, tr.quarterImage[i]->height); + FBO_AttachImage(tr.quarterFbo[i], tr.quarterImage[i], GL_COLOR_ATTACHMENT0_EXT, 0); + R_CheckFBO(tr.quarterFbo[i]); + } } - if (r_ssao->integer) + if (tr.hdrDepthImage) { tr.hdrDepthFbo = FBO_Create("_hdrDepth", tr.hdrDepthImage->width, tr.hdrDepthImage->height); FBO_AttachImage(tr.hdrDepthFbo, tr.hdrDepthImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.hdrDepthFbo); + } + if (tr.screenSsaoImage) + { tr.screenSsaoFbo = FBO_Create("_screenssao", tr.screenSsaoImage->width, tr.screenSsaoImage->height); FBO_AttachImage(tr.screenSsaoFbo, tr.screenSsaoImage, GL_COLOR_ATTACHMENT0_EXT, 0); R_CheckFBO(tr.screenSsaoFbo); From 87cb2167bfc9fc364a28fe9e3d63cc5977f4b48f Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 10 Mar 2016 03:44:21 -0800 Subject: [PATCH 106/480] OpenGL2: Fixes to depth blur and ssao. --- code/renderergl2/glsl/depthblur_fp.glsl | 11 +++++++---- code/renderergl2/glsl/ssao_fp.glsl | 5 +++-- code/renderergl2/tr_backend.c | 7 ++----- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/code/renderergl2/glsl/depthblur_fp.glsl b/code/renderergl2/glsl/depthblur_fp.glsl index 60a261c5..a5b264fd 100644 --- a/code/renderergl2/glsl/depthblur_fp.glsl +++ b/code/renderergl2/glsl/depthblur_fp.glsl @@ -4,6 +4,7 @@ uniform sampler2D u_ScreenDepthMap; uniform vec4 u_ViewInfo; // zfar / znear, zfar, 1/width, 1/height varying vec2 var_ScreenTex; +//float gauss[8] = float[8](0.17, 0.17, 0.16, 0.14, 0.12, 0.1, 0.08, 0.06); //float gauss[5] = float[5](0.30, 0.23, 0.097, 0.024, 0.0033); float gauss[4] = float[4](0.40, 0.24, 0.054, 0.0044); //float gauss[3] = float[3](0.60, 0.19, 0.0066); @@ -11,15 +12,17 @@ float gauss[4] = float[4](0.40, 0.24, 0.054, 0.0044); float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNear) { - float sampleZDivW = texture2D(depthMap, tex).r; + // depth is upside down? + float sampleZDivW = texture2D(depthMap, vec2(tex.x, 1.0 - tex.y)).r; return 1.0 / mix(zFarDivZNear, 1.0, sampleZDivW); } vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFarDivZNear, float zFar, vec2 scale) { float depthCenter = getLinearDepth(depthMap, tex, zFarDivZNear); - //scale /= zFarDivZNear * depthCenter; - //int blurSteps = int(float(BLUR_SIZE) / (zFarDivZNear * depthCenter)); + + // enable for less blurring for farther objects + //scale /= min(zFarDivZNear * depthCenter / 32.0, 2.0); #if defined(USE_HORIZONTAL_BLUR) vec2 direction = vec2(scale.x, 0.0); @@ -64,5 +67,5 @@ vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFa void main() { - gl_FragColor = depthGaussian1D(u_ScreenImageMap, u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y, u_ViewInfo.zw); + gl_FragColor = depthGaussian1D(u_ScreenImageMap, u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y, u_ViewInfo.wz); } diff --git a/code/renderergl2/glsl/ssao_fp.glsl b/code/renderergl2/glsl/ssao_fp.glsl index 84f18cb7..1714c2be 100644 --- a/code/renderergl2/glsl/ssao_fp.glsl +++ b/code/renderergl2/glsl/ssao_fp.glsl @@ -40,7 +40,8 @@ mat2 randomRotation( const vec2 p ) float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNear) { - float sampleZDivW = texture2D(depthMap, tex).r; + // depth is upside down? + float sampleZDivW = texture2D(depthMap, vec2(tex.x, 1.0 - tex.y)).r; return 1.0 / mix(zFarDivZNear, 1.0, sampleZDivW); } @@ -80,7 +81,7 @@ float ambientOcclusion(sampler2D depthMap, const vec2 tex, const float zFarDivZN void main() { - float result = ambientOcclusion(u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y, u_ViewInfo.zw); + float result = ambientOcclusion(u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y, u_ViewInfo.wz); gl_FragColor = vec4(vec3(result), 1.0); } diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index 3796d4d2..9771c1b5 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -977,7 +977,7 @@ const void *RB_DrawSurfs( const void *data ) { qglCopyTextureImage2D(tr.renderDepthImage->texnum, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, glConfig.vidWidth, glConfig.vidHeight, 0); } - if (r_ssao->integer) + if (tr.hdrDepthFbo) { // need the depth in a texture we can do GL_LINEAR sampling on, so copy it to an HDR image FBO_BlitFromTexture(tr.renderDepthImage, NULL, NULL, tr.hdrDepthFbo, NULL, NULL, NULL, 0); @@ -1079,7 +1079,6 @@ const void *RB_DrawSurfs( const void *data ) { RB_InstantQuad2(quadVerts, texCoords); - FBO_Bind(tr.screenShadowFbo); GLSL_BindProgram(&tr.depthBlurShader[1]); @@ -1100,6 +1099,7 @@ const void *RB_DrawSurfs( const void *data ) { viewInfo[2] = 1.0f / ((float)(tr.quarterImage[0]->width) * tan(backEnd.viewParms.fovX * M_PI / 360.0f) * 2.0f); viewInfo[3] = 1.0f / ((float)(tr.quarterImage[0]->height) * tan(backEnd.viewParms.fovY * M_PI / 360.0f) * 2.0f); + viewInfo[3] *= (float)backEnd.viewParms.viewportHeight / (float)backEnd.viewParms.viewportWidth; FBO_Bind(tr.quarterFbo[0]); @@ -1541,9 +1541,6 @@ const void *RB_PostProcess(const void *data) srcBox[3] = backEnd.viewParms.viewportHeight * tr.screenSsaoImage->height / (float)glConfig.vidHeight; //FBO_BlitFromTexture(tr.screenSsaoImage, srcBox, NULL, srcFbo, dstBox, NULL, NULL, GLS_SRCBLEND_DST_COLOR | GLS_DSTBLEND_ZERO); - srcBox[1] = tr.screenSsaoImage->height - srcBox[1]; - srcBox[3] = -srcBox[3]; - FBO_Blit(tr.screenSsaoFbo, srcBox, NULL, srcFbo, dstBox, NULL, NULL, GLS_SRCBLEND_DST_COLOR | GLS_DSTBLEND_ZERO); } From 93e1feaaad19fcc97459b8fd15492b1ff3551bc3 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 11 Mar 2016 04:37:50 -0800 Subject: [PATCH 107/480] OpenGL2: More ssao/depth blur improvements. --- code/renderergl2/glsl/depthblur_fp.glsl | 18 +++++++++++------- code/renderergl2/glsl/depthblur_vp.glsl | 5 ++++- code/renderergl2/glsl/ssao_fp.glsl | 3 +-- code/renderergl2/tr_backend.c | 7 +++++-- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/code/renderergl2/glsl/depthblur_fp.glsl b/code/renderergl2/glsl/depthblur_fp.glsl index a5b264fd..9685f6d7 100644 --- a/code/renderergl2/glsl/depthblur_fp.glsl +++ b/code/renderergl2/glsl/depthblur_fp.glsl @@ -9,11 +9,11 @@ varying vec2 var_ScreenTex; float gauss[4] = float[4](0.40, 0.24, 0.054, 0.0044); //float gauss[3] = float[3](0.60, 0.19, 0.0066); #define BLUR_SIZE 4 +//#define USE_GAUSS float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNear) { - // depth is upside down? - float sampleZDivW = texture2D(depthMap, vec2(tex.x, 1.0 - tex.y)).r; + float sampleZDivW = texture2D(depthMap, tex).r; return 1.0 / mix(zFarDivZNear, 1.0, sampleZDivW); } @@ -22,12 +22,14 @@ vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFa float depthCenter = getLinearDepth(depthMap, tex, zFarDivZNear); // enable for less blurring for farther objects - //scale /= min(zFarDivZNear * depthCenter / 32.0, 2.0); + scale /= clamp(zFarDivZNear * depthCenter / 32.0, 1.0, 2.0); #if defined(USE_HORIZONTAL_BLUR) - vec2 direction = vec2(scale.x, 0.0); + vec2 direction = vec2(scale.x * 2.0, 0.0); + vec2 nudge = vec2(0.0, scale.y * 0.5); #else // if defined(USE_VERTICAL_BLUR) - vec2 direction = vec2(0.0, scale.y); + vec2 direction = vec2(0.0, scale.y * 2.0); + vec2 nudge = vec2(scale.x * 0.5, 0.0); #endif vec2 slope = vec2(dFdx(depthCenter), dFdy(depthCenter)) / vec2(dFdx(tex.x), dFdy(tex.y)); @@ -46,7 +48,7 @@ vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFa { for (j = 1; j < BLUR_SIZE; j++) { - vec2 offset = direction * j; + vec2 offset = direction * (float(j) - 0.25) + nudge; float depthSample = getLinearDepth(depthMap, tex + offset, zFarDivZNear); float depthExpected = depthCenter + dot(slope, offset); float useSample = float(abs(depthSample - depthExpected) < zLimit); @@ -57,9 +59,11 @@ vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFa result += texture2D(imageMap, tex + offset) * useSample; total += useSample; #endif + nudge = -nudge; } direction = -direction; + nudge = -nudge; } return result / total; @@ -67,5 +71,5 @@ vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFa void main() { - gl_FragColor = depthGaussian1D(u_ScreenImageMap, u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y, u_ViewInfo.wz); + gl_FragColor = depthGaussian1D(u_ScreenImageMap, u_ScreenDepthMap, var_ScreenTex, u_ViewInfo.x, u_ViewInfo.y, u_ViewInfo.zw); } diff --git a/code/renderergl2/glsl/depthblur_vp.glsl b/code/renderergl2/glsl/depthblur_vp.glsl index 9c46a79f..ba0b6c56 100644 --- a/code/renderergl2/glsl/depthblur_vp.glsl +++ b/code/renderergl2/glsl/depthblur_vp.glsl @@ -1,12 +1,15 @@ attribute vec4 attr_Position; attribute vec4 attr_TexCoord0; +uniform vec4 u_ViewInfo; // zfar / znear, zfar, 1/width, 1/height + varying vec2 var_ScreenTex; void main() { gl_Position = attr_Position; - var_ScreenTex = attr_TexCoord0.xy; + var_ScreenTex = (floor(attr_TexCoord0.xy * (1.0 / u_ViewInfo.zw - vec2(1.0))) + vec2(0.5)) * u_ViewInfo.zw; + //vec2 screenCoords = gl_Position.xy / gl_Position.w; //var_ScreenTex = screenCoords * 0.5 + 0.5; } diff --git a/code/renderergl2/glsl/ssao_fp.glsl b/code/renderergl2/glsl/ssao_fp.glsl index 1714c2be..93f61859 100644 --- a/code/renderergl2/glsl/ssao_fp.glsl +++ b/code/renderergl2/glsl/ssao_fp.glsl @@ -40,8 +40,7 @@ mat2 randomRotation( const vec2 p ) float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNear) { - // depth is upside down? - float sampleZDivW = texture2D(depthMap, vec2(tex.x, 1.0 - tex.y)).r; + float sampleZDivW = texture2D(depthMap, tex).r; return 1.0 / mix(zFarDivZNear, 1.0, sampleZDivW); } diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index 9771c1b5..64ae59ab 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -980,7 +980,11 @@ const void *RB_DrawSurfs( const void *data ) { if (tr.hdrDepthFbo) { // need the depth in a texture we can do GL_LINEAR sampling on, so copy it to an HDR image - FBO_BlitFromTexture(tr.renderDepthImage, NULL, NULL, tr.hdrDepthFbo, NULL, NULL, NULL, 0); + ivec4_t srcBox; + + VectorSet4(srcBox, 0, tr.renderDepthImage->height, tr.renderDepthImage->width, -tr.renderDepthImage->height); + + FBO_BlitFromTexture(tr.renderDepthImage, srcBox, NULL, tr.hdrDepthFbo, NULL, NULL, NULL, 0); } if (r_sunlightMode->integer && backEnd.viewParms.flags & VPF_USESUNLIGHT) @@ -1540,7 +1544,6 @@ const void *RB_PostProcess(const void *data) srcBox[2] = backEnd.viewParms.viewportWidth * tr.screenSsaoImage->width / (float)glConfig.vidWidth; srcBox[3] = backEnd.viewParms.viewportHeight * tr.screenSsaoImage->height / (float)glConfig.vidHeight; - //FBO_BlitFromTexture(tr.screenSsaoImage, srcBox, NULL, srcFbo, dstBox, NULL, NULL, GLS_SRCBLEND_DST_COLOR | GLS_DSTBLEND_ZERO); FBO_Blit(tr.screenSsaoFbo, srcBox, NULL, srcFbo, dstBox, NULL, NULL, GLS_SRCBLEND_DST_COLOR | GLS_DSTBLEND_ZERO); } From eb7408ddac79b0d6693421498488a3cdfabb732a Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 14 Mar 2016 06:45:51 -0700 Subject: [PATCH 108/480] OpenGL2: Fix r_lightmap. --- code/renderergl2/tr_shade.c | 43 ++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index ca2a02b6..433f64c8 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -1141,9 +1141,9 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) index |= LIGHTDEF_USE_SHADOWMAP; } - if (r_lightmap->integer && index & LIGHTDEF_USE_LIGHTMAP) + if (r_lightmap->integer && ((index & LIGHTDEF_LIGHTTYPE_MASK) == LIGHTDEF_USE_LIGHTMAP)) { - index = LIGHTDEF_USE_LIGHTMAP; + index = LIGHTDEF_USE_TCGEN_AND_TCMOD; } sp = &pStage->glslShaderGroup[index]; @@ -1232,19 +1232,32 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) GLSL_SetUniformVec4(sp, UNIFORM_FOGCOLORMASK, fogColorMask); } - ComputeTexMods( pStage, TB_DIFFUSEMAP, texMatrix, texOffTurb ); - GLSL_SetUniformVec4(sp, UNIFORM_DIFFUSETEXMATRIX, texMatrix); - GLSL_SetUniformVec4(sp, UNIFORM_DIFFUSETEXOFFTURB, texOffTurb); - - GLSL_SetUniformInt(sp, UNIFORM_TCGEN0, pStage->bundle[0].tcGen); - if (pStage->bundle[0].tcGen == TCGEN_VECTOR) + if (r_lightmap->integer) { - vec3_t vec; + vec4_t v; + VectorSet4(v, 1.0f, 0.0f, 0.0f, 1.0f); + GLSL_SetUniformVec4(sp, UNIFORM_DIFFUSETEXMATRIX, v); + VectorSet4(v, 0.0f, 0.0f, 0.0f, 0.0f); + GLSL_SetUniformVec4(sp, UNIFORM_DIFFUSETEXOFFTURB, v); - VectorCopy(pStage->bundle[0].tcGenVectors[0], vec); - GLSL_SetUniformVec3(sp, UNIFORM_TCGEN0VECTOR0, vec); - VectorCopy(pStage->bundle[0].tcGenVectors[1], vec); - GLSL_SetUniformVec3(sp, UNIFORM_TCGEN0VECTOR1, vec); + GLSL_SetUniformInt(sp, UNIFORM_TCGEN0, TCGEN_LIGHTMAP); + } + else + { + ComputeTexMods(pStage, TB_DIFFUSEMAP, texMatrix, texOffTurb); + GLSL_SetUniformVec4(sp, UNIFORM_DIFFUSETEXMATRIX, texMatrix); + GLSL_SetUniformVec4(sp, UNIFORM_DIFFUSETEXOFFTURB, texOffTurb); + + GLSL_SetUniformInt(sp, UNIFORM_TCGEN0, pStage->bundle[0].tcGen); + if (pStage->bundle[0].tcGen == TCGEN_VECTOR) + { + vec3_t vec; + + VectorCopy(pStage->bundle[0].tcGenVectors[0], vec); + GLSL_SetUniformVec3(sp, UNIFORM_TCGEN0VECTOR0, vec); + VectorCopy(pStage->bundle[0].tcGenVectors[1], vec); + GLSL_SetUniformVec3(sp, UNIFORM_TCGEN0VECTOR1, vec); + } } GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); @@ -1294,7 +1307,7 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) { for (i = 0; i < NUM_TEXTURE_BUNDLES; i++) { - if (i == TB_LIGHTMAP) + if (i == TB_COLORMAP) R_BindAnimatedImageToTMU( &pStage->bundle[TB_LIGHTMAP], i); else GL_BindToTMU( tr.whiteImage, i ); @@ -1304,7 +1317,7 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) { for (i = 0; i < NUM_TEXTURE_BUNDLES; i++) { - if (i == TB_LIGHTMAP) + if (i == TB_COLORMAP) R_BindAnimatedImageToTMU( &pStage->bundle[TB_DELUXEMAP], i); else GL_BindToTMU( tr.whiteImage, i ); From f911e32bb059f714dfc49dc2296bc6f27c442e4c Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 15 Mar 2016 05:20:25 -0700 Subject: [PATCH 109/480] OpenGL2: Fix horribly broken metallic shader. --- code/renderergl2/glsl/lightall_fp.glsl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index f16298a3..64cae3fa 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -333,8 +333,9 @@ void main() // specular red is gloss // specular green is metallicness float gloss = specular.r; - specular.rgb = specular.g * diffuse.rgb + vec3(0.04 - 0.04 * specular.g); - diffuse.rgb *= 1.0 - specular.g; + float metal = specular.g; + specular.rgb = metal * diffuse.rgb + vec3(0.04 - 0.04 * metal); + diffuse.rgb *= 1.0 - metal; #else // diffuse rgb is diffuse // specular rgb is specular reflectance at normal incidence From 2a3c331ba1bfd31484f3f80d51c9d2b38f5d3191 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sun, 27 Mar 2016 12:46:38 -0400 Subject: [PATCH 110/480] Sys_GetProcessorFeatures() didn't check for 3DNow! or Altivec. --- code/sys/sys_main.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/sys/sys_main.c b/code/sys/sys_main.c index 60cdb50c..b97d7a3e 100644 --- a/code/sys/sys_main.c +++ b/code/sys/sys_main.c @@ -274,10 +274,12 @@ cpuFeatures_t Sys_GetProcessorFeatures( void ) cpuFeatures_t features = 0; #ifndef DEDICATED - if( SDL_HasRDTSC( ) ) features |= CF_RDTSC; - if( SDL_HasMMX( ) ) features |= CF_MMX; - if( SDL_HasSSE( ) ) features |= CF_SSE; - if( SDL_HasSSE2( ) ) features |= CF_SSE2; + if( SDL_HasRDTSC( ) ) features |= CF_RDTSC; + if( SDL_SDL_Has3DNow( ) ) features |= CF_3DNOW; + if( SDL_HasMMX( ) ) features |= CF_MMX; + if( SDL_HasSSE( ) ) features |= CF_SSE; + if( SDL_HasSSE2( ) ) features |= CF_SSE2; + if( SDL_HasAltiVec( ) ) features |= CF_ALTIVEC; #endif return features; From 11668bb1f0fb2d70cd6760009f7781c079341a2a Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sun, 27 Mar 2016 12:02:12 -0500 Subject: [PATCH 111/480] Fix typo of SDL_Has3DNow() in Sys_GetProcessorFeatures() --- code/sys/sys_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/sys/sys_main.c b/code/sys/sys_main.c index b97d7a3e..4f4c5783 100644 --- a/code/sys/sys_main.c +++ b/code/sys/sys_main.c @@ -275,7 +275,7 @@ cpuFeatures_t Sys_GetProcessorFeatures( void ) #ifndef DEDICATED if( SDL_HasRDTSC( ) ) features |= CF_RDTSC; - if( SDL_SDL_Has3DNow( ) ) features |= CF_3DNOW; + if( SDL_Has3DNow( ) ) features |= CF_3DNOW; if( SDL_HasMMX( ) ) features |= CF_MMX; if( SDL_HasSSE( ) ) features |= CF_SSE; if( SDL_HasSSE2( ) ) features |= CF_SSE2; From ee7fdef87f6a333628dc1846d3207bc80f996616 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 28 Mar 2016 22:26:19 -0700 Subject: [PATCH 112/480] OpenGL2: Improve cubemap outside error. --- code/renderergl2/tr_main.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/renderergl2/tr_main.c b/code/renderergl2/tr_main.c index bd27018b..24d17e0b 100644 --- a/code/renderergl2/tr_main.c +++ b/code/renderergl2/tr_main.c @@ -2931,12 +2931,16 @@ void R_RenderCubemapSide( int cubemapIndex, int cubemapSide, qboolean subscene ) { vec3_t ambient, directed, lightDir; + float scale; + R_LightForPoint(tr.refdef.vieworg, ambient, directed, lightDir); - tr.refdef.colorScale = 1.0f; //766.0f / (directed[0] + directed[1] + directed[2] + 1.0f); + scale = directed[0] + directed[1] + directed[2] + ambient[0] + ambient[1] + ambient[2] + 1.0f; + + tr.refdef.colorScale = 1.0f; //766.0f / scale; // only print message for first side - if (directed[0] + directed[1] + directed[2] == 0 && cubemapSide == 0) + if (scale < 1.0001f && cubemapSide == 0) { - ri.Printf(PRINT_ALL, "cubemap %d %s (%f, %f, %f) is outside the lightgrid!\n", cubemapIndex, tr.cubemaps[cubemapIndex].name, tr.refdef.vieworg[0], tr.refdef.vieworg[1], tr.refdef.vieworg[2]); + ri.Printf(PRINT_ALL, "cubemap %d %s (%f, %f, %f) is outside the lightgrid or inside a wall!\n", cubemapIndex, tr.cubemaps[cubemapIndex].name, tr.refdef.vieworg[0], tr.refdef.vieworg[1], tr.refdef.vieworg[2]); } } From 80357ff1f26841424de4e9616fa7c4788da1cc8f Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Mon, 4 Apr 2016 12:18:59 -0500 Subject: [PATCH 113/480] Remove incorrect documentation from q3a.service rate, snaps, and cl_maxpackets cvars only affect client. --- misc/linux/q3a.service | 3 --- 1 file changed, 3 deletions(-) diff --git a/misc/linux/q3a.service b/misc/linux/q3a.service index d37c7f16..e039eec8 100644 --- a/misc/linux/q3a.service +++ b/misc/linux/q3a.service @@ -13,9 +13,6 @@ Restart=on-abort # dedicated 0 is non-dedicted an not available with ioq3ded, 1 is LAN, 2 is Internet # sv_pure 1 prevents clients from using their own pk3-files # com_hunkmegs defaults to 56, should be 128/192/256 on a modern system(?) -# rate 25000 defines the rate in which client & server communicate -# snaps 40 defines gamestate-snapshots client & server exchange in secs -# cl_maxpackets 125 max amount of FPS being counted on the server-side [Install] WantedBy=multi-user.target From 60f56670d696f49b1f7183e152f8d408f1d5b918 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 5 Apr 2016 02:21:14 -0700 Subject: [PATCH 114/480] OpenGL2: Render metals as nonmetal on cubemaps, and some ComputeShaderColors cleanup. --- code/renderergl2/tr_shade.c | 44 ++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index 433f64c8..23810a05 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -446,11 +446,12 @@ static void ComputeShaderColors( shaderStage_t *pStage, vec4_t baseColor, vec4_t || ((blend & GLS_SRCBLEND_BITS) == GLS_SRCBLEND_ONE_MINUS_DST_COLOR) || ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_SRC_COLOR) || ((blend & GLS_DSTBLEND_BITS) == GLS_DSTBLEND_ONE_MINUS_SRC_COLOR); + qboolean isWorldDraw = !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL); + float scale = 1.0f; #if defined(USE_OVERBRIGHT) float exactLight = 1.0f; #else - qboolean isWorldDraw = !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL); float exactLight = (isBlend || !isWorldDraw) ? 1.0f : (float)(1 << r_mapOverBrightBits->integer); #endif @@ -610,17 +611,16 @@ static void ComputeShaderColors( shaderStage_t *pStage, vec4_t baseColor, vec4_t break; } - // multiply color by overbrightbits if this isn't a blend if (tr.overbrightBits && !isBlend) - { - float scale = 1 << tr.overbrightBits; + scale *= 1 << tr.overbrightBits; - baseColor[0] *= scale; - baseColor[1] *= scale; - baseColor[2] *= scale; - vertColor[0] *= scale; - vertColor[1] *= scale; - vertColor[2] *= scale; + if ((backEnd.refdef.colorScale != 1.0f) && !isBlend && isWorldDraw) + scale *= backEnd.refdef.colorScale; + + if (scale != 1.0f) + { + VectorScale(baseColor, scale, baseColor); + VectorScale(vertColor, scale, vertColor); } // FIXME: find some way to implement this. @@ -1071,6 +1071,8 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) int deformGen; vec5_t deformParams; + qboolean renderToCubemap = tr.renderCubeFbo && glState.currentFBO == tr.renderCubeFbo; + ComputeDeformValues(&deformGen, deformParams); ComputeFogValues(fogDistanceVector, fogDepthVector, &eyeT); @@ -1186,13 +1188,6 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) ComputeShaderColors(pStage, baseColor, vertColor, pStage->stateBits); - if ((backEnd.refdef.colorScale != 1.0f) && !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL)) - { - // use VectorScale to only scale first three values, not alpha - VectorScale(baseColor, backEnd.refdef.colorScale, baseColor); - VectorScale(vertColor, backEnd.refdef.colorScale, vertColor); - } - GLSL_SetUniformVec4(sp, UNIFORM_BASECOLOR, baseColor); GLSL_SetUniformVec4(sp, UNIFORM_VERTCOLOR, vertColor); } @@ -1263,7 +1258,20 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformVec4(sp, UNIFORM_NORMALSCALE, pStage->normalScale); - GLSL_SetUniformVec4(sp, UNIFORM_SPECULARSCALE, pStage->specularScale); + + { + vec4_t specularScale; + Vector4Copy(pStage->specularScale, specularScale); + + if (renderToCubemap) + { + // force specular to nonmetal if rendering cubemaps + if (r_pbr->integer) + specularScale[1] = 0.0f; + } + + GLSL_SetUniformVec4(sp, UNIFORM_SPECULARSCALE, pStage->specularScale); + } //GLSL_SetUniformFloat(sp, UNIFORM_MAPLIGHTSCALE, backEnd.refdef.mapLightScale); From 1f6703821f11be9c711c6ee42371ab290dd12776 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 5 Apr 2016 02:37:05 -0700 Subject: [PATCH 115/480] OpenGL2: Some FBO cleanup, and add non-depth blur to blur shader. --- code/renderergl2/glsl/depthblur_fp.glsl | 17 +++- code/renderergl2/glsl/depthblur_vp.glsl | 3 +- code/renderergl2/tr_backend.c | 71 +++++++++++++- code/renderergl2/tr_fbo.c | 120 +++++++++--------------- code/renderergl2/tr_fbo.h | 2 +- code/renderergl2/tr_glsl.c | 7 +- code/renderergl2/tr_local.h | 2 +- code/renderergl2/tr_postprocess.c | 51 ++++------ 8 files changed, 148 insertions(+), 125 deletions(-) diff --git a/code/renderergl2/glsl/depthblur_fp.glsl b/code/renderergl2/glsl/depthblur_fp.glsl index 9685f6d7..d71b3487 100644 --- a/code/renderergl2/glsl/depthblur_fp.glsl +++ b/code/renderergl2/glsl/depthblur_fp.glsl @@ -9,7 +9,10 @@ varying vec2 var_ScreenTex; float gauss[4] = float[4](0.40, 0.24, 0.054, 0.0044); //float gauss[3] = float[3](0.60, 0.19, 0.0066); #define BLUR_SIZE 4 + +#if !defined(USE_DEPTH) //#define USE_GAUSS +#endif float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNear) { @@ -19,21 +22,21 @@ float getLinearDepth(sampler2D depthMap, const vec2 tex, const float zFarDivZNea vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFarDivZNear, float zFar, vec2 scale) { - float depthCenter = getLinearDepth(depthMap, tex, zFarDivZNear); - // enable for less blurring for farther objects +#if defined(USE_DEPTH) + float depthCenter = getLinearDepth(depthMap, tex, zFarDivZNear); + vec2 slope = vec2(dFdx(depthCenter), dFdy(depthCenter)) / vec2(dFdx(tex.x), dFdy(tex.y)); scale /= clamp(zFarDivZNear * depthCenter / 32.0, 1.0, 2.0); +#endif #if defined(USE_HORIZONTAL_BLUR) vec2 direction = vec2(scale.x * 2.0, 0.0); vec2 nudge = vec2(0.0, scale.y * 0.5); #else // if defined(USE_VERTICAL_BLUR) vec2 direction = vec2(0.0, scale.y * 2.0); - vec2 nudge = vec2(scale.x * 0.5, 0.0); + vec2 nudge = vec2(-scale.x * 0.5, 0.0); #endif - vec2 slope = vec2(dFdx(depthCenter), dFdy(depthCenter)) / vec2(dFdx(tex.x), dFdy(tex.y)); - #if defined(USE_GAUSS) vec4 result = texture2D(imageMap, tex) * gauss[0]; float total = gauss[0]; @@ -49,9 +52,13 @@ vec4 depthGaussian1D(sampler2D imageMap, sampler2D depthMap, vec2 tex, float zFa for (j = 1; j < BLUR_SIZE; j++) { vec2 offset = direction * (float(j) - 0.25) + nudge; +#if defined(USE_DEPTH) float depthSample = getLinearDepth(depthMap, tex + offset, zFarDivZNear); float depthExpected = depthCenter + dot(slope, offset); float useSample = float(abs(depthSample - depthExpected) < zLimit); +#else + float useSample = 1.0; +#endif #if defined(USE_GAUSS) result += texture2D(imageMap, tex + offset) * (gauss[j] * useSample); total += gauss[j] * useSample; diff --git a/code/renderergl2/glsl/depthblur_vp.glsl b/code/renderergl2/glsl/depthblur_vp.glsl index ba0b6c56..9c47660c 100644 --- a/code/renderergl2/glsl/depthblur_vp.glsl +++ b/code/renderergl2/glsl/depthblur_vp.glsl @@ -8,7 +8,8 @@ varying vec2 var_ScreenTex; void main() { gl_Position = attr_Position; - var_ScreenTex = (floor(attr_TexCoord0.xy * (1.0 / u_ViewInfo.zw - vec2(1.0))) + vec2(0.5)) * u_ViewInfo.zw; + vec2 wh = vec2(1.0) / u_ViewInfo.zw - vec2(1.0); + var_ScreenTex = (floor(attr_TexCoord0.xy * wh) + vec2(0.5)) * u_ViewInfo.zw; //vec2 screenCoords = gl_Position.xy / gl_Position.w; //var_ScreenTex = screenCoords * 0.5 + 0.5; diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index 64ae59ab..5a0eb6a7 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -980,11 +980,11 @@ const void *RB_DrawSurfs( const void *data ) { if (tr.hdrDepthFbo) { // need the depth in a texture we can do GL_LINEAR sampling on, so copy it to an HDR image - ivec4_t srcBox; + vec4_t srcTexCoords; - VectorSet4(srcBox, 0, tr.renderDepthImage->height, tr.renderDepthImage->width, -tr.renderDepthImage->height); + VectorSet4(srcTexCoords, 0.0f, 0.0f, 1.0f, 1.0f); - FBO_BlitFromTexture(tr.renderDepthImage, srcBox, NULL, tr.hdrDepthFbo, NULL, NULL, NULL, 0); + FBO_BlitFromTexture(tr.renderDepthImage, srcTexCoords, NULL, tr.hdrDepthFbo, NULL, NULL, NULL, 0); } if (r_sunlightMode->integer && backEnd.viewParms.flags & VPF_USESUNLIGHT) @@ -1584,6 +1584,71 @@ const void *RB_PostProcess(const void *data) else RB_GaussianBlur(backEnd.refdef.blurFactor); +#if 0 + if (0) + { + vec4_t quadVerts[4]; + vec2_t texCoords[4]; + ivec4_t iQtrBox; + vec4_t box; + vec4_t viewInfo; + static float scale = 5.0f; + + scale -= 0.005f; + if (scale < 0.01f) + scale = 5.0f; + + FBO_FastBlit(NULL, NULL, tr.quarterFbo[0], NULL, GL_COLOR_BUFFER_BIT, GL_LINEAR); + + iQtrBox[0] = backEnd.viewParms.viewportX * tr.quarterImage[0]->width / (float)glConfig.vidWidth; + iQtrBox[1] = backEnd.viewParms.viewportY * tr.quarterImage[0]->height / (float)glConfig.vidHeight; + iQtrBox[2] = backEnd.viewParms.viewportWidth * tr.quarterImage[0]->width / (float)glConfig.vidWidth; + iQtrBox[3] = backEnd.viewParms.viewportHeight * tr.quarterImage[0]->height / (float)glConfig.vidHeight; + + qglViewport(iQtrBox[0], iQtrBox[1], iQtrBox[2], iQtrBox[3]); + qglScissor(iQtrBox[0], iQtrBox[1], iQtrBox[2], iQtrBox[3]); + + VectorSet4(box, 0.0f, 0.0f, 1.0f, 1.0f); + + texCoords[0][0] = box[0]; texCoords[0][1] = box[3]; + texCoords[1][0] = box[2]; texCoords[1][1] = box[3]; + texCoords[2][0] = box[2]; texCoords[2][1] = box[1]; + texCoords[3][0] = box[0]; texCoords[3][1] = box[1]; + + VectorSet4(box, -1.0f, -1.0f, 1.0f, 1.0f); + + VectorSet4(quadVerts[0], box[0], box[3], 0, 1); + VectorSet4(quadVerts[1], box[2], box[3], 0, 1); + VectorSet4(quadVerts[2], box[2], box[1], 0, 1); + VectorSet4(quadVerts[3], box[0], box[1], 0, 1); + + GL_State(GLS_DEPTHTEST_DISABLE); + + + VectorSet4(viewInfo, backEnd.viewParms.zFar / r_znear->value, backEnd.viewParms.zFar, 0.0, 0.0); + + viewInfo[2] = scale / (float)(tr.quarterImage[0]->width); + viewInfo[3] = scale / (float)(tr.quarterImage[0]->height); + + FBO_Bind(tr.quarterFbo[1]); + GLSL_BindProgram(&tr.depthBlurShader[2]); + GL_BindToTMU(tr.quarterImage[0], TB_COLORMAP); + GLSL_SetUniformVec4(&tr.depthBlurShader[2], UNIFORM_VIEWINFO, viewInfo); + RB_InstantQuad2(quadVerts, texCoords); + + FBO_Bind(tr.quarterFbo[0]); + GLSL_BindProgram(&tr.depthBlurShader[3]); + GL_BindToTMU(tr.quarterImage[1], TB_COLORMAP); + GLSL_SetUniformVec4(&tr.depthBlurShader[3], UNIFORM_VIEWINFO, viewInfo); + RB_InstantQuad2(quadVerts, texCoords); + + SetViewportAndScissor(); + + FBO_FastBlit(tr.quarterFbo[1], NULL, NULL, NULL, GL_COLOR_BUFFER_BIT, GL_LINEAR); + FBO_Bind(NULL); + } +#endif + if (0 && r_sunlightMode->integer) { ivec4_t dstBox; diff --git a/code/renderergl2/tr_fbo.c b/code/renderergl2/tr_fbo.c index d013748e..9ba63441 100644 --- a/code/renderergl2/tr_fbo.c +++ b/code/renderergl2/tr_fbo.c @@ -487,10 +487,9 @@ void R_FBOList_f(void) ri.Printf(PRINT_ALL, " %i FBOs\n", tr.numFBOs); } -void FBO_BlitFromTexture(struct image_s *src, ivec4_t inSrcBox, vec2_t inSrcTexScale, FBO_t *dst, ivec4_t inDstBox, struct shaderProgram_s *shaderProgram, vec4_t inColor, int blend) +void FBO_BlitFromTexture(struct image_s *src, vec4_t inSrcTexCorners, vec2_t inSrcTexScale, FBO_t *dst, ivec4_t inDstBox, struct shaderProgram_s *shaderProgram, vec4_t inColor, int blend) { - ivec4_t dstBox, srcBox; - vec2_t srcTexScale; + ivec4_t dstBox; vec4_t color; vec4_t quadVerts[4]; vec2_t texCoords[4]; @@ -505,49 +504,44 @@ void FBO_BlitFromTexture(struct image_s *src, ivec4_t inSrcBox, vec2_t inSrcTexS return; } - if (inSrcBox) + width = dst ? dst->width : glConfig.vidWidth; + height = dst ? dst->height : glConfig.vidHeight; + + if (inSrcTexCorners) { - VectorSet4(srcBox, inSrcBox[0], inSrcBox[1], inSrcBox[0] + inSrcBox[2], inSrcBox[1] + inSrcBox[3]); + VectorSet2(texCoords[0], inSrcTexCorners[0], inSrcTexCorners[1]); + VectorSet2(texCoords[1], inSrcTexCorners[2], inSrcTexCorners[1]); + VectorSet2(texCoords[2], inSrcTexCorners[2], inSrcTexCorners[3]); + VectorSet2(texCoords[3], inSrcTexCorners[0], inSrcTexCorners[3]); } else { - VectorSet4(srcBox, 0, 0, src->width, src->height); + VectorSet2(texCoords[0], 0.0f, 1.0f); + VectorSet2(texCoords[1], 1.0f, 1.0f); + VectorSet2(texCoords[2], 1.0f, 0.0f); + VectorSet2(texCoords[3], 0.0f, 0.0f); } // framebuffers are 0 bottom, Y up. if (inDstBox) { - if (dst) - { - dstBox[0] = inDstBox[0]; - dstBox[1] = dst->height - inDstBox[1] - inDstBox[3]; - dstBox[2] = inDstBox[0] + inDstBox[2]; - dstBox[3] = dst->height - inDstBox[1]; - } - else - { - dstBox[0] = inDstBox[0]; - dstBox[1] = glConfig.vidHeight - inDstBox[1] - inDstBox[3]; - dstBox[2] = inDstBox[0] + inDstBox[2]; - dstBox[3] = glConfig.vidHeight - inDstBox[1]; - } - } - else if (dst) - { - VectorSet4(dstBox, 0, dst->height, dst->width, 0); + dstBox[0] = inDstBox[0]; + dstBox[1] = height - inDstBox[1] - inDstBox[3]; + dstBox[2] = inDstBox[0] + inDstBox[2]; + dstBox[3] = height - inDstBox[1]; } else { - VectorSet4(dstBox, 0, glConfig.vidHeight, glConfig.vidWidth, 0); + VectorSet4(dstBox, 0, height, width, 0); } if (inSrcTexScale) { - VectorCopy2(inSrcTexScale, srcTexScale); + VectorCopy2(inSrcTexScale, invTexRes); } else { - srcTexScale[0] = srcTexScale[1] = 1.0f; + VectorSet2(invTexRes, 1.0f, 1.0f); } if (inColor) @@ -566,17 +560,6 @@ void FBO_BlitFromTexture(struct image_s *src, ivec4_t inSrcBox, vec2_t inSrcTexS FBO_Bind(dst); - if (glState.currentFBO) - { - width = glState.currentFBO->width; - height = glState.currentFBO->height; - } - else - { - width = glConfig.vidWidth; - height = glConfig.vidHeight; - } - qglViewport( 0, 0, width, height ); qglScissor( 0, 0, width, height ); @@ -586,18 +569,13 @@ void FBO_BlitFromTexture(struct image_s *src, ivec4_t inSrcBox, vec2_t inSrcTexS GL_BindToTMU(src, TB_COLORMAP); - VectorSet4(quadVerts[0], dstBox[0], dstBox[1], 0, 1); - VectorSet4(quadVerts[1], dstBox[2], dstBox[1], 0, 1); - VectorSet4(quadVerts[2], dstBox[2], dstBox[3], 0, 1); - VectorSet4(quadVerts[3], dstBox[0], dstBox[3], 0, 1); + VectorSet4(quadVerts[0], dstBox[0], dstBox[1], 0.0f, 1.0f); + VectorSet4(quadVerts[1], dstBox[2], dstBox[1], 0.0f, 1.0f); + VectorSet4(quadVerts[2], dstBox[2], dstBox[3], 0.0f, 1.0f); + VectorSet4(quadVerts[3], dstBox[0], dstBox[3], 0.0f, 1.0f); - texCoords[0][0] = srcBox[0] / (float)src->width; texCoords[0][1] = 1.0f - srcBox[1] / (float)src->height; - texCoords[1][0] = srcBox[2] / (float)src->width; texCoords[1][1] = 1.0f - srcBox[1] / (float)src->height; - texCoords[2][0] = srcBox[2] / (float)src->width; texCoords[2][1] = 1.0f - srcBox[3] / (float)src->height; - texCoords[3][0] = srcBox[0] / (float)src->width; texCoords[3][1] = 1.0f - srcBox[3] / (float)src->height; - - invTexRes[0] = 1.0f / src->width * srcTexScale[0]; - invTexRes[1] = 1.0f / src->height * srcTexScale[1]; + invTexRes[0] /= src->width; + invTexRes[1] /= src->height; GL_State( blend ); @@ -609,14 +587,14 @@ void FBO_BlitFromTexture(struct image_s *src, ivec4_t inSrcBox, vec2_t inSrcTexS GLSL_SetUniformVec2(shaderProgram, UNIFORM_AUTOEXPOSUREMINMAX, tr.refdef.autoExposureMinMax); GLSL_SetUniformVec3(shaderProgram, UNIFORM_TONEMINAVGMAXLINEAR, tr.refdef.toneMinAvgMaxLinear); - RB_InstantQuad2(quadVerts, texCoords); //, color, shaderProgram, invTexRes); + RB_InstantQuad2(quadVerts, texCoords); FBO_Bind(oldFbo); } void FBO_Blit(FBO_t *src, ivec4_t inSrcBox, vec2_t srcTexScale, FBO_t *dst, ivec4_t dstBox, struct shaderProgram_s *shaderProgram, vec4_t color, int blend) { - ivec4_t srcBox; + vec4_t srcTexCorners; if (!src) { @@ -624,20 +602,19 @@ void FBO_Blit(FBO_t *src, ivec4_t inSrcBox, vec2_t srcTexScale, FBO_t *dst, ivec return; } - // framebuffers are 0 bottom, Y up. if (inSrcBox) { - srcBox[0] = inSrcBox[0]; - srcBox[1] = src->height - inSrcBox[1] - inSrcBox[3]; - srcBox[2] = inSrcBox[2]; - srcBox[3] = inSrcBox[3]; + srcTexCorners[0] = inSrcBox[0] / (float)src->width; + srcTexCorners[1] = (inSrcBox[1] + inSrcBox[3]) / (float)src->height; + srcTexCorners[2] = (inSrcBox[0] + inSrcBox[2]) / (float)src->width; + srcTexCorners[3] = inSrcBox[1] / (float)src->height; } else { - VectorSet4(srcBox, 0, src->height, src->width, -src->height); + VectorSet4(srcTexCorners, 0.0f, 0.0f, 1.0f, 1.0f); } - FBO_BlitFromTexture(src->colorImage[0], srcBox, srcTexScale, dst, dstBox, shaderProgram, color, blend | GLS_DEPTHTEST_DISABLE); + FBO_BlitFromTexture(src->colorImage[0], srcTexCorners, srcTexScale, dst, dstBox, shaderProgram, color, blend | GLS_DEPTHTEST_DISABLE); } void FBO_FastBlit(FBO_t *src, ivec4_t srcBox, FBO_t *dst, ivec4_t dstBox, int buffers, int filter) @@ -651,22 +628,15 @@ void FBO_FastBlit(FBO_t *src, ivec4_t srcBox, FBO_t *dst, ivec4_t dstBox, int bu return; } - // get to a neutral state first - //FBO_Bind(NULL); - srcFb = src ? src->frameBuffer : 0; dstFb = dst ? dst->frameBuffer : 0; if (!srcBox) { - if (src) - { - VectorSet4(srcBoxFinal, 0, 0, src->width, src->height); - } - else - { - VectorSet4(srcBoxFinal, 0, 0, glConfig.vidWidth, glConfig.vidHeight); - } + int width = src ? src->width : glConfig.vidWidth; + int height = src ? src->height : glConfig.vidHeight; + + VectorSet4(srcBoxFinal, 0, 0, width, height); } else { @@ -675,14 +645,10 @@ void FBO_FastBlit(FBO_t *src, ivec4_t srcBox, FBO_t *dst, ivec4_t dstBox, int bu if (!dstBox) { - if (dst) - { - VectorSet4(dstBoxFinal, 0, 0, dst->width, dst->height); - } - else - { - VectorSet4(dstBoxFinal, 0, 0, glConfig.vidWidth, glConfig.vidHeight); - } + int width = dst ? dst->width : glConfig.vidWidth; + int height = dst ? dst->height : glConfig.vidHeight; + + VectorSet4(dstBoxFinal, 0, 0, width, height); } else { diff --git a/code/renderergl2/tr_fbo.h b/code/renderergl2/tr_fbo.h index 3f23a353..29d24d52 100644 --- a/code/renderergl2/tr_fbo.h +++ b/code/renderergl2/tr_fbo.h @@ -57,7 +57,7 @@ void FBO_Bind(FBO_t *fbo); void FBO_Init(void); void FBO_Shutdown(void); -void FBO_BlitFromTexture(struct image_s *src, ivec4_t srcBox, vec2_t srcTexScale, FBO_t *dst, ivec4_t dstBox, struct shaderProgram_s *shaderProgram, vec4_t color, int blend); +void FBO_BlitFromTexture(struct image_s *src, vec4_t inSrcTexCorners, vec2_t inSrcTexScale, FBO_t *dst, ivec4_t inDstBox, struct shaderProgram_s *shaderProgram, vec4_t inColor, int blend); void FBO_Blit(FBO_t *src, ivec4_t srcBox, vec2_t srcTexScale, FBO_t *dst, ivec4_t dstBox, struct shaderProgram_s *shaderProgram, vec4_t color, int blend); void FBO_FastBlit(FBO_t *src, ivec4_t srcBox, FBO_t *dst, ivec4_t dstBox, int buffers, int filter); diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index b825c19e..683e173d 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -1284,7 +1284,7 @@ void GLSL_InitGPUShaders(void) numEtcShaders++; - for (i = 0; i < 2; i++) + for (i = 0; i < 4; i++) { attribs = ATTR_POSITION | ATTR_TEXCOORD; extradefines[0] = '\0'; @@ -1294,6 +1294,9 @@ void GLSL_InitGPUShaders(void) else Q_strcat(extradefines, 1024, "#define USE_HORIZONTAL_BLUR\n"); + if (!(i & 2)) + Q_strcat(extradefines, 1024, "#define USE_DEPTH\n"); + if (!GLSL_InitGPUShader(&tr.depthBlurShader[i], "depthBlur", attribs, qtrue, extradefines, qtrue, fallbackShader_depthblur_vp, fallbackShader_depthblur_fp)) { @@ -1373,7 +1376,7 @@ void GLSL_ShutdownGPUShaders(void) GLSL_DeleteGPUShader(&tr.shadowmaskShader); GLSL_DeleteGPUShader(&tr.ssaoShader); - for ( i = 0; i < 2; i++) + for ( i = 0; i < 4; i++) GLSL_DeleteGPUShader(&tr.depthBlurShader[i]); } diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 78e37ecb..b50692e5 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1591,7 +1591,7 @@ typedef struct { shaderProgram_t calclevels4xShader[2]; shaderProgram_t shadowmaskShader; shaderProgram_t ssaoShader; - shaderProgram_t depthBlurShader[2]; + shaderProgram_t depthBlurShader[4]; shaderProgram_t testcubeShader; diff --git a/code/renderergl2/tr_postprocess.c b/code/renderergl2/tr_postprocess.c index 1952ae96..c4e51554 100644 --- a/code/renderergl2/tr_postprocess.c +++ b/code/renderergl2/tr_postprocess.c @@ -227,6 +227,7 @@ void RB_BokehBlur(FBO_t *src, ivec4_t srcBox, FBO_t *dst, ivec4_t dstBox, float static void RB_RadialBlur(FBO_t *srcFbo, FBO_t *dstFbo, int passes, float stretch, float x, float y, float w, float h, float xcenter, float ycenter, float alpha) { ivec4_t srcBox, dstBox; + int srcWidth, srcHeight; vec4_t color; const float inc = 1.f / passes; const float mul = powf(stretch, inc); @@ -235,10 +236,10 @@ static void RB_RadialBlur(FBO_t *srcFbo, FBO_t *dstFbo, int passes, float stretc alpha *= inc; VectorSet4(color, alpha, alpha, alpha, 1.0f); - if (srcFbo) - VectorSet4(srcBox, 0, 0, srcFbo->width, srcFbo->height); - else - VectorSet4(srcBox, 0, 0, glConfig.vidWidth, glConfig.vidHeight); + srcWidth = srcFbo ? srcFbo->width : glConfig.vidWidth; + srcHeight = srcFbo ? srcFbo->height : glConfig.vidHeight; + + VectorSet4(srcBox, 0, 0, srcWidth, srcHeight); VectorSet4(dstBox, x, y, w, h); FBO_Blit(srcFbo, srcBox, NULL, dstFbo, dstBox, NULL, color, 0); @@ -251,20 +252,10 @@ static void RB_RadialBlur(FBO_t *srcFbo, FBO_t *dstFbo, int passes, float stretc float s0 = xcenter * (1.f - iscale); float t0 = (1.0f - ycenter) * (1.f - iscale); - if (srcFbo) - { - srcBox[0] = s0 * srcFbo->width; - srcBox[1] = t0 * srcFbo->height; - srcBox[2] = iscale * srcFbo->width; - srcBox[3] = iscale * srcFbo->height; - } - else - { - srcBox[0] = s0 * glConfig.vidWidth; - srcBox[1] = t0 * glConfig.vidHeight; - srcBox[2] = iscale * glConfig.vidWidth; - srcBox[3] = iscale * glConfig.vidHeight; - } + srcBox[0] = s0 * srcWidth; + srcBox[1] = t0 * srcHeight; + srcBox[2] = iscale * srcWidth; + srcBox[3] = iscale * srcHeight; FBO_Blit(srcFbo, srcBox, NULL, dstFbo, dstBox, NULL, color, GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); @@ -349,23 +340,15 @@ void RB_SunRays(FBO_t *srcFbo, ivec4_t srcBox, FBO_t *dstFbo, ivec4_t dstBox) { float mul = 1.f; ivec4_t rayBox, quarterBox; + int srcWidth = srcFbo ? srcFbo->width : glConfig.vidWidth; + int srcHeight = srcFbo ? srcFbo->height : glConfig.vidHeight; VectorSet4(color, mul, mul, mul, 1); - if (srcFbo) - { - rayBox[0] = srcBox[0] * tr.sunRaysFbo->width / srcFbo->width; - rayBox[1] = srcBox[1] * tr.sunRaysFbo->height / srcFbo->height; - rayBox[2] = srcBox[2] * tr.sunRaysFbo->width / srcFbo->width; - rayBox[3] = srcBox[3] * tr.sunRaysFbo->height / srcFbo->height; - } - else - { - rayBox[0] = srcBox[0] * tr.sunRaysFbo->width / glConfig.vidWidth; - rayBox[1] = srcBox[1] * tr.sunRaysFbo->height / glConfig.vidHeight; - rayBox[2] = srcBox[2] * tr.sunRaysFbo->width / glConfig.vidWidth; - rayBox[3] = srcBox[3] * tr.sunRaysFbo->height / glConfig.vidHeight; - } + rayBox[0] = srcBox[0] * tr.sunRaysFbo->width / srcWidth; + rayBox[1] = srcBox[1] * tr.sunRaysFbo->height / srcHeight; + rayBox[2] = srcBox[2] * tr.sunRaysFbo->width / srcWidth; + rayBox[3] = srcBox[3] * tr.sunRaysFbo->height / srcHeight; quarterBox[0] = 0; quarterBox[1] = tr.quarterFbo[0]->height; @@ -483,10 +466,8 @@ void RB_GaussianBlur(float blur) FBO_FastBlit(tr.quarterFbo[0], NULL, tr.textureScratchFbo[0], NULL, GL_COLOR_BUFFER_BIT, GL_LINEAR); // set the alpha channel - VectorSet4(srcBox, 0, 0, tr.whiteImage->width, tr.whiteImage->height); - VectorSet4(dstBox, 0, 0, tr.textureScratchFbo[0]->width, tr.textureScratchFbo[0]->height); qglColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); - FBO_BlitFromTexture(tr.whiteImage, srcBox, NULL, tr.textureScratchFbo[0], dstBox, NULL, color, GLS_DEPTHTEST_DISABLE); + FBO_BlitFromTexture(tr.whiteImage, NULL, NULL, tr.textureScratchFbo[0], NULL, NULL, color, GLS_DEPTHTEST_DISABLE); qglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); // blur the tiny buffer horizontally and vertically From d8afce680510ab664f4e575d019fe045b99228c1 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sun, 8 May 2016 20:08:07 -0500 Subject: [PATCH 116/480] Cross-compiling using mingw should only pick one gcc executable If multiple mingw toolchains are installed, the Makefile set CC to all present gcc executables. Pick only the first one instead of passing the others as arguments. "CC: /usr/bin/i686-w64-mingw32-gcc /usr/bin/i686-pc-mingw32-gcc" --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index d65d9bf6..799780bf 100644 --- a/Makefile +++ b/Makefile @@ -514,13 +514,13 @@ ifdef MINGW endif ifndef CC - CC=$(strip $(foreach MINGW_PREFIX, $(MINGW_PREFIXES), \ - $(call bin_path, $(MINGW_PREFIX)-gcc))) + CC=$(firstword $(strip $(foreach MINGW_PREFIX, $(MINGW_PREFIXES), \ + $(call bin_path, $(MINGW_PREFIX)-gcc)))) endif ifndef WINDRES - WINDRES=$(strip $(foreach MINGW_PREFIX, $(MINGW_PREFIXES), \ - $(call bin_path, $(MINGW_PREFIX)-windres))) + WINDRES=$(firstword $(strip $(foreach MINGW_PREFIX, $(MINGW_PREFIXES), \ + $(call bin_path, $(MINGW_PREFIX)-windres)))) endif else # Some MinGW installations define CC to cc, but don't actually provide cc, From 8b458e545765687c60fc810d3e261d48a378e21c Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Mon, 9 May 2016 10:41:58 -0500 Subject: [PATCH 117/480] Fix warnings that names passed to Name_PlayerNameCompletion is not const --- code/client/cl_main.c | 2 +- code/qcommon/common.c | 2 +- code/qcommon/qcommon.h | 2 +- code/server/sv_ccmds.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 205fd63c..5ede69dd 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -1806,7 +1806,7 @@ static void CL_CompletePlayerName( char *args, int argNum ) if( argNum == 2 ) { char names[MAX_CLIENTS][MAX_NAME_LENGTH]; - char *namesPtr[MAX_CLIENTS]; + const char *namesPtr[MAX_CLIENTS]; int i; int clientCount; int nameCount; diff --git a/code/qcommon/common.c b/code/qcommon/common.c index aa62724b..c3c595b5 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -3699,7 +3699,7 @@ qboolean Com_PlayerNameToFieldString( char *str, int length, const char *name ) return qtrue; } -void Field_CompletePlayerName( char **names, int nameCount ) +void Field_CompletePlayerName( const char **names, int nameCount ) { qboolean whitespace; diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index b47a41f4..70f1e6c1 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -762,7 +762,7 @@ void Field_CompleteFilename( const char *dir, const char *ext, qboolean stripExt, qboolean allowNonPureFilesOnDisk ); void Field_CompleteCommand( char *cmd, qboolean doCommands, qboolean doCvars ); -void Field_CompletePlayerName( char **names, int count ); +void Field_CompletePlayerName( const char **names, int count ); /* ============================================================== diff --git a/code/server/sv_ccmds.c b/code/server/sv_ccmds.c index 506afcca..5f26b853 100644 --- a/code/server/sv_ccmds.c +++ b/code/server/sv_ccmds.c @@ -1480,7 +1480,7 @@ SV_CompletePlayerName static void SV_CompletePlayerName( char *args, int argNum ) { if( argNum == 2 ) { char names[MAX_CLIENTS][MAX_NAME_LENGTH]; - char *namesPtr[MAX_CLIENTS]; + const char *namesPtr[MAX_CLIENTS]; client_t *cl; int i; int nameCount; From acd659b05a6b2a8b3f80ddc08c8f1416919160e3 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Mon, 9 May 2016 10:47:34 -0500 Subject: [PATCH 118/480] OpenGL2: Fix specularScale override not being used in RB_IterateStagesGeneric --- code/renderergl2/tr_shade.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index 23810a05..b49e9146 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -1270,7 +1270,7 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) specularScale[1] = 0.0f; } - GLSL_SetUniformVec4(sp, UNIFORM_SPECULARSCALE, pStage->specularScale); + GLSL_SetUniformVec4(sp, UNIFORM_SPECULARSCALE, specularScale); } //GLSL_SetUniformFloat(sp, UNIFORM_MAPLIGHTSCALE, backEnd.refdef.mapLightScale); From 2dcc5719e3b0da88eb260d6ae88c4de802efe210 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Mon, 16 May 2016 03:09:04 -0500 Subject: [PATCH 119/480] Explicitly set cull type for skybox Explicitly set cull type for skybox to front, instead of using whatever cull type the previous shader used (which could result in the skybox not being visible due to only drawing back faces). The sky cloud stages set the cull type so they are not affected by previous cull type. --- code/renderergl1/tr_sky.c | 1 + code/renderergl2/tr_sky.c | 1 + 2 files changed, 2 insertions(+) diff --git a/code/renderergl1/tr_sky.c b/code/renderergl1/tr_sky.c index daa5ff12..1d12e924 100644 --- a/code/renderergl1/tr_sky.c +++ b/code/renderergl1/tr_sky.c @@ -769,6 +769,7 @@ void RB_StageIteratorSky( void ) { qglPushMatrix (); GL_State( 0 ); + GL_Cull( CT_FRONT_SIDED ); qglTranslatef (backEnd.viewParms.or.origin[0], backEnd.viewParms.or.origin[1], backEnd.viewParms.or.origin[2]); DrawSkyBox( tess.shader ); diff --git a/code/renderergl2/tr_sky.c b/code/renderergl2/tr_sky.c index 840d0149..cc6b9cd8 100644 --- a/code/renderergl2/tr_sky.c +++ b/code/renderergl2/tr_sky.c @@ -871,6 +871,7 @@ void RB_StageIteratorSky( void ) { mat4_t oldmodelview; GL_State( 0 ); + GL_Cull( CT_FRONT_SIDED ); //qglTranslatef (backEnd.viewParms.or.origin[0], backEnd.viewParms.or.origin[1], backEnd.viewParms.or.origin[2]); { From 6394180224f0b955848ace033443bdf7c4f88539 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 18 May 2016 21:12:34 -0700 Subject: [PATCH 120/480] OpenGL2: Speed up surface merging. --- code/renderergl2/tr_bsp.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index 78728f81..2b3f0a55 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -2120,12 +2120,6 @@ static void R_CreateWorldVaos(void) // -1 represents 0, -2 represents 1, and so on s_worldData.viewSurfaces = ri.Hunk_Alloc(sizeof(*s_worldData.viewSurfaces) * s_worldData.nummarksurfaces, h_low); - // copy view surfaces into mark surfaces - for (i = 0; i < s_worldData.nummarksurfaces; i++) - { - s_worldData.viewSurfaces[i] = s_worldData.marksurfaces[i]; - } - // actually merge surfaces mergedSurf = s_worldData.mergedSurfaces; for(firstSurf = lastSurf = surfacesSorted; firstSurf < surfacesSorted + numSortedSurfaces; firstSurf = lastSurf) @@ -2186,23 +2180,22 @@ static void R_CreateWorldVaos(void) mergedSurf->cubemapIndex = (*firstSurf)->cubemapIndex; mergedSurf->shader = (*firstSurf)->shader; - // redirect view surfaces to this surf + // change surfacesViewCount[] from leaf index to viewSurface index - 1 so we can redirect later + // subtracting 2 (viewSurface index - 1) to avoid collision with -1 (no leaf) for (currSurf = firstSurf; currSurf < lastSurf; currSurf++) - s_worldData.surfacesViewCount[*currSurf - s_worldData.surfaces] = -2; - - for (k = 0; k < s_worldData.nummarksurfaces; k++) - { - if (s_worldData.surfacesViewCount[s_worldData.marksurfaces[k]] == -2) - s_worldData.viewSurfaces[k] = -((int)(mergedSurf - s_worldData.mergedSurfaces) + 1); - } - - for (currSurf = firstSurf; currSurf < lastSurf; currSurf++) - s_worldData.surfacesViewCount[*currSurf - s_worldData.surfaces] = -1; + s_worldData.surfacesViewCount[*currSurf - s_worldData.surfaces] = -((int)(mergedSurf - s_worldData.mergedSurfaces)) - 2; mergedSurf++; } - ri.Printf(PRINT_ALL, "Processed %d mergeable surfaces into %d merged, %d unmerged\n", + // direct viewSurfaces to merged and unmerged surfaces + for (i = 0; i < s_worldData.nummarksurfaces; i++) + { + int viewSurfaceIndex = s_worldData.surfacesViewCount[s_worldData.marksurfaces[i]] + 1; + s_worldData.viewSurfaces[i] = (viewSurfaceIndex < 0) ? viewSurfaceIndex : s_worldData.marksurfaces[i]; + } + + ri.Printf(PRINT_ALL, "Processed %d mergeable surfaces into %d merged, %d unmerged\n", numSortedSurfaces, numMergedSurfaces, numUnmergedSurfaces); } From d875c1f03cec9611f86cc342c376bd334288c863 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Mon, 23 May 2016 09:06:34 -0500 Subject: [PATCH 121/480] Improve keyboard/joystick input in Team Arena UI Make Yes/No, Multi, Slider, and Bind items allow enter key to change value without mouse over item. Add support for left and right arrow keys and joystick button 1-4 to Yes/No, Multi, and Slider and many item specific 'ownerdraw' key handlers. Listbox still requires mouse hover and Team Arena main menu requires mouse hover to get anywhere... Enabling K_JOY1-4 to select in default key handler also caused additional mouse button (K_AUX1-16) to select, which is done in q3_ui as well. Both handle K_AUX equally badly (not treated as a mouse button and not handled by item specific key handlers), so it's probably fine. --- code/ui/ui_main.c | 342 +++++++++++++++++++------------------------- code/ui/ui_shared.c | 93 +++++++++--- code/ui/ui_shared.h | 1 + 3 files changed, 229 insertions(+), 207 deletions(-) diff --git a/code/ui/ui_main.c b/code/ui/ui_main.c index 8de581a7..c1cdf740 100644 --- a/code/ui/ui_main.c +++ b/code/ui/ui_main.c @@ -2260,79 +2260,78 @@ static qboolean UI_OwnerDrawVisible(int flags) { } static qboolean UI_Handicap_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - int h; - h = Com_Clamp( 5, 100, trap_Cvar_VariableValue("handicap") ); - if (key == K_MOUSE2) { - h -= 5; - } else { - h += 5; - } - if (h > 100) { - h = 5; - } else if (h < 5) { + int select = UI_SelectForKey(key); + if (select != 0) { + int h; + + h = Com_Clamp( 5, 100, trap_Cvar_VariableValue("handicap") ); + h += 5 * select; + + if (h > 100) { + h = 5; + } else if (h < 5) { h = 100; } - trap_Cvar_Set( "handicap", va( "%i", h) ); - return qtrue; - } - return qfalse; + + trap_Cvar_SetValue( "handicap", h ); + return qtrue; + } + return qfalse; } static qboolean UI_Effects_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { + int select = UI_SelectForKey(key); + if (select != 0) { + uiInfo.effectsColor += select; - if (key == K_MOUSE2) { - uiInfo.effectsColor--; - } else { - uiInfo.effectsColor++; - } - - if( uiInfo.effectsColor > 6 ) { - uiInfo.effectsColor = 0; + if( uiInfo.effectsColor > 6 ) { + uiInfo.effectsColor = 0; } else if (uiInfo.effectsColor < 0) { - uiInfo.effectsColor = 6; + uiInfo.effectsColor = 6; } - trap_Cvar_SetValue( "color1", uitogamecode[uiInfo.effectsColor] ); - return qtrue; - } - return qfalse; + trap_Cvar_SetValue( "color1", uitogamecode[uiInfo.effectsColor] ); + return qtrue; + } + return qfalse; } static qboolean UI_ClanName_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - int i; - i = UI_TeamIndexFromName(UI_Cvar_VariableString("ui_teamName")); + int select = UI_SelectForKey(key); + if (select != 0) { + int i; + + i = UI_TeamIndexFromName(UI_Cvar_VariableString("ui_teamName")); + if (uiInfo.teamList[i].cinematic >= 0) { - trap_CIN_StopCinematic(uiInfo.teamList[i].cinematic); + trap_CIN_StopCinematic(uiInfo.teamList[i].cinematic); uiInfo.teamList[i].cinematic = -1; } - if (key == K_MOUSE2) { - i--; - } else { - i++; - } - if (i >= uiInfo.teamCount) { - i = 0; - } else if (i < 0) { + + i += select; + + if (i >= uiInfo.teamCount) { + i = 0; + } else if (i < 0) { i = uiInfo.teamCount - 1; } - trap_Cvar_Set( "ui_teamName", uiInfo.teamList[i].teamName); - UI_HeadCountByTeam(); - UI_FeederSelection(FEEDER_HEADS, 0); - updateModel = qtrue; - return qtrue; - } - return qfalse; + + trap_Cvar_Set( "ui_teamName", uiInfo.teamList[i].teamName); + UI_HeadCountByTeam(); + UI_FeederSelection(FEEDER_HEADS, 0); + updateModel = qtrue; + return qtrue; + } + return qfalse; } static qboolean UI_GameType_HandleKey(int flags, float *special, int key, qboolean resetMap) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { + int select = UI_SelectForKey(key); + if (select != 0) { int oldCount = UI_MapCountByGameType(qtrue); // hard coded mess here - if (key == K_MOUSE2) { + if (select < 0) { ui_gameType.integer--; if (ui_gameType.integer == 2) { ui_gameType.integer = 1; @@ -2348,57 +2347,49 @@ static qboolean UI_GameType_HandleKey(int flags, float *special, int key, qboole } } - if (uiInfo.gameTypes[ui_gameType.integer].gtEnum == GT_TOURNAMENT) { - trap_Cvar_Set("ui_Q3Model", "1"); + if (uiInfo.gameTypes[ui_gameType.integer].gtEnum < GT_TEAM) { + trap_Cvar_SetValue( "ui_Q3Model", 1 ); } else { - trap_Cvar_Set("ui_Q3Model", "0"); + trap_Cvar_SetValue( "ui_Q3Model", 0 ); } - trap_Cvar_Set("ui_gameType", va("%d", ui_gameType.integer)); + trap_Cvar_SetValue("ui_gameType", ui_gameType.integer); UI_SetCapFragLimits(qtrue); UI_LoadBestScores(uiInfo.mapList[ui_currentMap.integer].mapLoadName, uiInfo.gameTypes[ui_gameType.integer].gtEnum); if (resetMap && oldCount != UI_MapCountByGameType(qtrue)) { - trap_Cvar_Set( "ui_currentMap", "0"); + trap_Cvar_SetValue( "ui_currentMap", 0); Menu_SetFeederSelection(NULL, FEEDER_MAPS, 0, NULL); } - return qtrue; - } - return qfalse; + return qtrue; + } + return qfalse; } static qboolean UI_NetGameType_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { + int select = UI_SelectForKey(key); + if (select != 0) { + ui_netGameType.integer += select; - if (key == K_MOUSE2) { - ui_netGameType.integer--; - } else { - ui_netGameType.integer++; + if (ui_netGameType.integer < 0) { + ui_netGameType.integer = uiInfo.numGameTypes - 1; + } else if (ui_netGameType.integer >= uiInfo.numGameTypes) { + ui_netGameType.integer = 0; } - if (ui_netGameType.integer < 0) { - ui_netGameType.integer = uiInfo.numGameTypes - 1; - } else if (ui_netGameType.integer >= uiInfo.numGameTypes) { - ui_netGameType.integer = 0; - } - - trap_Cvar_Set( "ui_netGameType", va("%d", ui_netGameType.integer)); - trap_Cvar_Set( "ui_actualnetGameType", va("%d", uiInfo.gameTypes[ui_netGameType.integer].gtEnum)); - trap_Cvar_Set( "ui_currentNetMap", "0"); + trap_Cvar_SetValue( "ui_netGameType", ui_netGameType.integer); + trap_Cvar_SetValue( "ui_actualnetGameType", uiInfo.gameTypes[ui_netGameType.integer].gtEnum); + trap_Cvar_SetValue( "ui_currentNetMap", 0); UI_MapCountByGameType(qfalse); Menu_SetFeederSelection(NULL, FEEDER_ALLMAPS, 0, NULL); - return qtrue; - } - return qfalse; + return qtrue; + } + return qfalse; } static qboolean UI_JoinGameType_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - - if (key == K_MOUSE2) { - ui_joinGameType.integer--; - } else { - ui_joinGameType.integer++; - } + int select = UI_SelectForKey(key); + if (select != 0) { + ui_joinGameType.integer += select; if (ui_joinGameType.integer < 0) { ui_joinGameType.integer = uiInfo.numJoinGameTypes - 1; @@ -2406,7 +2397,7 @@ static qboolean UI_JoinGameType_HandleKey(int flags, float *special, int key) { ui_joinGameType.integer = 0; } - trap_Cvar_Set( "ui_joinGameType", va("%d", ui_joinGameType.integer)); + trap_Cvar_SetValue( "ui_joinGameType", ui_joinGameType.integer); UI_BuildServerDisplayList(qtrue); return qtrue; } @@ -2416,64 +2407,54 @@ static qboolean UI_JoinGameType_HandleKey(int flags, float *special, int key) { static qboolean UI_Skill_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - int i = trap_Cvar_VariableValue( "g_spSkill" ); + int select = UI_SelectForKey(key); + if (select != 0) { + int i = trap_Cvar_VariableValue( "g_spSkill" ); - if (key == K_MOUSE2) { - i--; - } else { - i++; - } + i += select; - if (i < 1) { + if (i < 1) { i = numSkillLevels; } else if (i > numSkillLevels) { - i = 1; - } + i = 1; + } - trap_Cvar_Set("g_spSkill", va("%i", i)); - return qtrue; - } - return qfalse; + trap_Cvar_SetValue("g_spSkill", i); + return qtrue; + } + return qfalse; } static qboolean UI_TeamName_HandleKey(int flags, float *special, int key, qboolean blue) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - int i; - i = UI_TeamIndexFromName(UI_Cvar_VariableString((blue) ? "ui_blueTeam" : "ui_redTeam")); + int select = UI_SelectForKey(key); + if (select != 0) { + int i; - if (key == K_MOUSE2) { - i--; - } else { - i++; - } + i = UI_TeamIndexFromName(UI_Cvar_VariableString((blue) ? "ui_blueTeam" : "ui_redTeam")); + i += select; - if (i >= uiInfo.teamCount) { - i = 0; - } else if (i < 0) { + if (i >= uiInfo.teamCount) { + i = 0; + } else if (i < 0) { i = uiInfo.teamCount - 1; } - trap_Cvar_Set( (blue) ? "ui_blueTeam" : "ui_redTeam", uiInfo.teamList[i].teamName); - - return qtrue; - } - return qfalse; + trap_Cvar_Set( (blue) ? "ui_blueTeam" : "ui_redTeam", uiInfo.teamList[i].teamName); + return qtrue; + } + return qfalse; } static qboolean UI_TeamMember_HandleKey(int flags, float *special, int key, qboolean blue, int num) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { + int select = UI_SelectForKey(key); + if (select != 0) { // 0 - None // 1 - Human // 2..NumCharacters - Bot char *cvar = va(blue ? "ui_blueteam%i" : "ui_redteam%i", num); int value = trap_Cvar_VariableValue(cvar); - if (key == K_MOUSE2) { - value--; - } else { - value++; - } + value += select; if (ui_actualNetGameType.integer >= GT_TEAM) { if (value >= uiInfo.characterCount + 2) { @@ -2489,20 +2470,16 @@ static qboolean UI_TeamMember_HandleKey(int flags, float *special, int key, qboo } } - trap_Cvar_Set(cvar, va("%i", value)); - return qtrue; - } - return qfalse; + trap_Cvar_SetValue(cvar, value); + return qtrue; + } + return qfalse; } static qboolean UI_NetSource_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - - if (key == K_MOUSE2) { - ui_netSource.integer--; - } else { - ui_netSource.integer++; - } + int select = UI_SelectForKey(key); + if (select != 0) { + ui_netSource.integer += select; if(ui_netSource.integer >= UIAS_GLOBAL1 && ui_netSource.integer <= UIAS_GLOBAL5) { @@ -2514,12 +2491,8 @@ static qboolean UI_NetSource_HandleKey(int flags, float *special, int key) { trap_Cvar_VariableStringBuffer(cvarname, masterstr, sizeof(masterstr)); if(*masterstr) break; - - if (key == K_MOUSE2) { - ui_netSource.integer--; - } else { - ui_netSource.integer++; - } + + ui_netSource.integer += select; } } @@ -2533,54 +2506,48 @@ static qboolean UI_NetSource_HandleKey(int flags, float *special, int key) { if (!(ui_netSource.integer >= UIAS_GLOBAL1 && ui_netSource.integer <= UIAS_GLOBAL5)) { UI_StartServerRefresh(qtrue); } - trap_Cvar_Set( "ui_netSource", va("%d", ui_netSource.integer)); + trap_Cvar_SetValue( "ui_netSource", ui_netSource.integer); return qtrue; } return qfalse; } static qboolean UI_NetFilter_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { + int select = UI_SelectForKey(key); + if (select != 0) { + ui_serverFilterType.integer += select; - if (key == K_MOUSE2) { - ui_serverFilterType.integer--; - } else { - ui_serverFilterType.integer++; - } - - if (ui_serverFilterType.integer >= numServerFilters) { - ui_serverFilterType.integer = 0; - } else if (ui_serverFilterType.integer < 0) { - ui_serverFilterType.integer = numServerFilters - 1; + if (ui_serverFilterType.integer >= numServerFilters) { + ui_serverFilterType.integer = 0; + } else if (ui_serverFilterType.integer < 0) { + ui_serverFilterType.integer = numServerFilters - 1; } UI_BuildServerDisplayList(qtrue); - return qtrue; - } - return qfalse; + return qtrue; + } + return qfalse; } static qboolean UI_OpponentName_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - if (key == K_MOUSE2) { + int select = UI_SelectForKey(key); + if (select != 0) { + if (select < 0) { UI_PriorOpponent(); } else { UI_NextOpponent(); } - return qtrue; - } - return qfalse; + return qtrue; + } + return qfalse; } static qboolean UI_BotName_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { + int select = UI_SelectForKey(key); + if (select != 0) { int game = trap_Cvar_VariableValue("g_gametype"); int value = uiInfo.botIndex; - if (key == K_MOUSE2) { - value--; - } else { - value++; - } + value += select; if (game >= GT_TEAM) { if (value >= uiInfo.characterCount + 2) { @@ -2596,30 +2563,29 @@ static qboolean UI_BotName_HandleKey(int flags, float *special, int key) { } } uiInfo.botIndex = value; - return qtrue; - } - return qfalse; + return qtrue; + } + return qfalse; } static qboolean UI_BotSkill_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - if (key == K_MOUSE2) { - uiInfo.skillIndex--; - } else { - uiInfo.skillIndex++; - } + int select = UI_SelectForKey(key); + if (select != 0) { + uiInfo.skillIndex += select; + if (uiInfo.skillIndex >= numSkillLevels) { uiInfo.skillIndex = 0; } else if (uiInfo.skillIndex < 0) { uiInfo.skillIndex = numSkillLevels-1; } - return qtrue; - } + return qtrue; + } return qfalse; } static qboolean UI_RedBlue_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { + int select = UI_SelectForKey(key); + if (select != 0) { uiInfo.redBlue ^= 1; return qtrue; } @@ -2627,19 +2593,16 @@ static qboolean UI_RedBlue_HandleKey(int flags, float *special, int key) { } static qboolean UI_Crosshair_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { - if (key == K_MOUSE2) { - uiInfo.currentCrosshair--; - } else { - uiInfo.currentCrosshair++; - } + int select = UI_SelectForKey(key); + if (select != 0) { + uiInfo.currentCrosshair += select; if (uiInfo.currentCrosshair >= NUM_CROSSHAIRS) { uiInfo.currentCrosshair = 0; } else if (uiInfo.currentCrosshair < 0) { uiInfo.currentCrosshair = NUM_CROSSHAIRS - 1; } - trap_Cvar_Set("cg_drawCrosshair", va("%d", uiInfo.currentCrosshair)); + trap_Cvar_SetValue("cg_drawCrosshair", uiInfo.currentCrosshair); return qtrue; } return qfalse; @@ -2648,7 +2611,8 @@ static qboolean UI_Crosshair_HandleKey(int flags, float *special, int key) { static qboolean UI_SelectedPlayer_HandleKey(int flags, float *special, int key) { - if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_ENTER || key == K_KP_ENTER) { + int select = UI_SelectForKey(key); + if (select != 0) { int selected; UI_BuildPlayerList(); @@ -2656,12 +2620,8 @@ static qboolean UI_SelectedPlayer_HandleKey(int flags, float *special, int key) return qfalse; } selected = trap_Cvar_VariableValue("cg_selectedPlayer"); - - if (key == K_MOUSE2) { - selected--; - } else { - selected++; - } + + selected += select; if (selected > uiInfo.myTeamCount) { selected = 0; @@ -2670,11 +2630,11 @@ static qboolean UI_SelectedPlayer_HandleKey(int flags, float *special, int key) } if (selected == uiInfo.myTeamCount) { - trap_Cvar_Set( "cg_selectedPlayerName", "Everyone"); + trap_Cvar_Set( "cg_selectedPlayerName", "Everyone"); } else { - trap_Cvar_Set( "cg_selectedPlayerName", uiInfo.teamNames[selected]); + trap_Cvar_Set( "cg_selectedPlayerName", uiInfo.teamNames[selected]); } - trap_Cvar_Set( "cg_selectedPlayer", va("%d", selected)); + trap_Cvar_SetValue( "cg_selectedPlayer", selected); } return qfalse; } diff --git a/code/ui/ui_shared.c b/code/ui/ui_shared.c index dc9f3af2..c95d386f 100644 --- a/code/ui/ui_shared.c +++ b/code/ui/ui_shared.c @@ -1932,12 +1932,20 @@ qboolean Item_ListBox_HandleKey(itemDef_t *item, int key, qboolean down, qboolea qboolean Item_YesNo_HandleKey(itemDef_t *item, int key) { - if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS && item->cvar) { - if (key == K_MOUSE1 || key == K_ENTER || key == K_MOUSE2 || key == K_MOUSE3) { - DC->setCVar(item->cvar, va("%i", !DC->getCVarValue(item->cvar))); - return qtrue; + if (item->cvar) { + qboolean action = qfalse; + if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) { + if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS) { + action = qtrue; + } + } else if (UI_SelectForKey(key) != 0) { + action = qtrue; } - } + if (action) { + DC->setCVar(item->cvar, va("%i", !DC->getCVarValue(item->cvar))); + return qtrue; + } + } return qfalse; @@ -2006,11 +2014,21 @@ const char *Item_Multi_Setting(itemDef_t *item) { qboolean Item_Multi_HandleKey(itemDef_t *item, int key) { multiDef_t *multiPtr = (multiDef_t*)item->typeData; if (multiPtr) { - if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS && item->cvar) { - if (key == K_MOUSE1 || key == K_ENTER || key == K_MOUSE2 || key == K_MOUSE3) { - int current = Item_Multi_FindCvarByValue(item) + 1; + if (item->cvar) { + int select = 0; + if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) { + if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS) { + select = (key == K_MOUSE2) ? -1 : 1; + } + } else { + select = UI_SelectForKey(key); + } + if (select != 0) { + int current = Item_Multi_FindCvarByValue(item) + select; int max = Item_Multi_CountSettings(item); - if ( current < 0 || current >= max ) { + if ( current < 0 ) { + current = max-1; + } else if ( current >= max ) { current = 0; } if (multiPtr->strDef) { @@ -2334,10 +2352,10 @@ qboolean Item_Slider_HandleKey(itemDef_t *item, int key, qboolean down) { float x, value, width, work; //DC->Print("slider handle key\n"); - if (item->window.flags & WINDOW_HASFOCUS && item->cvar && Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory)) { - if (key == K_MOUSE1 || key == K_ENTER || key == K_MOUSE2 || key == K_MOUSE3) { + if (item->cvar) { + if (key == K_MOUSE1 || key == K_MOUSE2 || key == K_MOUSE3) { editFieldDef_t *editDef = item->typeData; - if (editDef) { + if (editDef && Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && item->window.flags & WINDOW_HASFOCUS) { rectDef_t testRect; width = SLIDER_WIDTH; if (item->text) { @@ -2364,6 +2382,23 @@ qboolean Item_Slider_HandleKey(itemDef_t *item, int key, qboolean down) { return qtrue; } } + } else { + int select = UI_SelectForKey(key); + if (select != 0) { + editFieldDef_t *editDef = item->typeData; + if (editDef) { + // 20 is number of steps + value = DC->getCVarValue(item->cvar) + (((editDef->maxVal - editDef->minVal)/20) * select); + + if (value < editDef->minVal) + value = editDef->minVal; + else if (value > editDef->maxVal) + value = editDef->maxVal; + + DC->setCVar(item->cvar, va("%f", value)); + return qtrue; + } + } } } DC->Print("slider handle key exit\n"); @@ -2594,6 +2629,32 @@ static rectDef_t *Item_CorrectedTextRect(itemDef_t *item) { return ▭ } +// menu item key horizontal action: -1 = previous value, 1 = next value, 0 = no change +int UI_SelectForKey(int key) +{ + switch (key) { + case K_MOUSE1: + case K_MOUSE3: + case K_ENTER: + case K_KP_ENTER: + case K_RIGHTARROW: + case K_KP_RIGHTARROW: + case K_JOY1: + case K_JOY2: + case K_JOY3: + case K_JOY4: + return 1; // next + + case K_MOUSE2: + case K_LEFTARROW: + case K_KP_LEFTARROW: + return -1; // previous + } + + // no change + return 0; +} + void Menu_HandleKey(menuDef_t *menu, int key, qboolean down) { int i; itemDef_t *item = NULL; @@ -2723,7 +2784,6 @@ void Menu_HandleKey(menuDef_t *menu, int key, qboolean down) { case K_AUX14: case K_AUX15: case K_AUX16: - break; case K_KP_ENTER: case K_ENTER: if (item) { @@ -3435,9 +3495,10 @@ qboolean Item_Bind_HandleKey(itemDef_t *item, int key, qboolean down) { int id; int i; - if (Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory) && !g_waitingForKey) + if (!g_waitingForKey) { - if (down && (key == K_MOUSE1 || key == K_ENTER)) { + if (down && ((key == K_MOUSE1 && Rect_ContainsPoint(&item->window.rect, DC->cursorx, DC->cursory)) + || key == K_ENTER || key == K_KP_ENTER || key == K_JOY1 || key == K_JOY2 || key == K_JOY3 || key == K_JOY4)) { g_waitingForKey = qtrue; g_bindItem = item; } @@ -3445,7 +3506,7 @@ qboolean Item_Bind_HandleKey(itemDef_t *item, int key, qboolean down) { } else { - if (!g_waitingForKey || g_bindItem == NULL) { + if (g_bindItem == NULL) { return qtrue; } diff --git a/code/ui/ui_shared.h b/code/ui/ui_shared.h index efde614d..ea4a4596 100644 --- a/code/ui/ui_shared.h +++ b/code/ui/ui_shared.h @@ -417,6 +417,7 @@ void Menu_Reset( void ); qboolean Menus_AnyFullScreenVisible( void ); void Menus_Activate(menuDef_t *menu); +int UI_SelectForKey(int key); displayContextDef_t *Display_GetContext( void ); void *Display_CaptureItem(int x, int y); qboolean Display_MouseMove(void *p, int x, int y); From 7811b2acb2955132a68d1b869d4df98eb3ae194a Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Mon, 23 May 2016 10:23:14 -0500 Subject: [PATCH 122/480] Fix iamamonkey printing 'levels' instead of 'awards' --- code/q3_ui/ui_gameinfo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/q3_ui/ui_gameinfo.c b/code/q3_ui/ui_gameinfo.c index d839723c..38cd3ea9 100644 --- a/code/q3_ui/ui_gameinfo.c +++ b/code/q3_ui/ui_gameinfo.c @@ -796,7 +796,7 @@ void UI_SPUnlockMedals_f( void ) { trap_Cvar_Set( "g_spAwards", awardData ); - trap_Print( "All levels unlocked at 100\n" ); + trap_Print( "All awards unlocked at 100\n" ); } From e0b2256043708c77a0381d346a939a82dccf70e6 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 27 May 2016 00:41:14 -0500 Subject: [PATCH 123/480] Include SDL2 dll from repository in NSIS installer Before it required manually copying SDL 1.2 dll into misc/nsis/ which the engine no longer uses. --- misc/nsis/Makefile | 11 ++++++++--- misc/nsis/ioquake3.nsi.in | 10 +++++----- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/misc/nsis/Makefile b/misc/nsis/Makefile index a79e4e15..82dec12f 100644 --- a/misc/nsis/Makefile +++ b/misc/nsis/Makefile @@ -28,8 +28,13 @@ endif ifndef USE_INTERNAL_JPEG USE_INTERNAL_JPEG=1 endif - -SDLDLL=SDL.dll +ifndef SDLDLL + ifeq ($(ARCH),x86_64) + SDLDLL=SDL264.dll + else + SDLDLL=SDL2.dll + endif +endif DEFINES= ifeq ($(USE_RENDERER_DLOPEN),1) @@ -55,7 +60,7 @@ endif all: ioquake3-$(VERSION)-$(RELEASE).$(ARCH).exe ioquake3.$(ARCH).nsi: ioquake3.nsi.in - sed 's/XXXVERSIONXXX/$(VERSION)/;s/XXXRELEASEXXX/$(RELEASE)/;s/x86/$(ARCH)/g;s/SDL.dll/$(SDLDLL)/' < $< > $@ + sed 's/XXXVERSIONXXX/$(VERSION)/;s/XXXRELEASEXXX/$(RELEASE)/;s/x86/$(ARCH)/g;s/SDL2.dll/$(SDLDLL)/' < $< > $@ ioquake3-$(VERSION)-$(RELEASE).$(ARCH).exe: ioquake3.$(ARCH).nsi makensis $(DEFINES) ioquake3.$(ARCH).nsi diff --git a/misc/nsis/ioquake3.nsi.in b/misc/nsis/ioquake3.nsi.in index c30391b8..de029e64 100644 --- a/misc/nsis/ioquake3.nsi.in +++ b/misc/nsis/ioquake3.nsi.in @@ -5,7 +5,7 @@ ; This file is used to automatically build the installers in the ; openSUSE build service, don't break this! ; -; you have to copy SDL.dll and OpenAL32.dll here manually +; you have to copy OpenAL32.dll here manually !define MULTIUSER_MUI !define MULTIUSER_EXECUTIONLEVEL Highest @@ -97,7 +97,7 @@ Section "ioquake3 (required)" !endif File "../../COPYING.txt" - File "/oname=README.txt" "../../README" + File "/oname=README.txt" "../../README.md" File "../../id-readme.txt" File "../../voip-readme.txt" @@ -132,11 +132,11 @@ Section "Start Menu Shortcuts" SectionEnd -Section "SDL.dll" +Section "SDL2.dll" SetOutPath $INSTDIR - File "SDL.dll" + File "../../build/release-mingw32-x86/SDL2.dll" SectionEnd @@ -199,7 +199,7 @@ Section "Uninstall" Delete $INSTDIR\jpeg8c.dll !endif - Delete $INSTDIR\SDL.dll + Delete $INSTDIR\SDL2.dll !ifdef USE_OPENAL_DLOPEN Delete $INSTDIR\OpenAL32.dll !endif From a40588c8b9ef2d5609a08dbed77742f71b9cff36 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Wed, 8 Jun 2016 03:36:15 -0700 Subject: [PATCH 124/480] OpenGL2: Set cubemap mip selection to match output from ggxcc. --- code/renderergl2/glsl/lightall_fp.glsl | 6 +++--- code/renderergl2/tr_glsl.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/code/renderergl2/glsl/lightall_fp.glsl b/code/renderergl2/glsl/lightall_fp.glsl index 64cae3fa..9e53d4a8 100644 --- a/code/renderergl2/glsl/lightall_fp.glsl +++ b/code/renderergl2/glsl/lightall_fp.glsl @@ -370,11 +370,11 @@ void main() // from http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/ vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir; - vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 * roughness).rgb * u_EnableTextures.w; + vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, ROUGHNESS_MIPS * roughness).rgb * u_EnableTextures.w; - // normalize cubemap based on lowest mip (~diffuse) + // normalize cubemap based on last roughness mip (~diffuse) // multiplying cubemap values by lighting below depends on either this or the cubemap being normalized at generation - //vec3 cubeLightDiffuse = max(textureCubeLod(u_CubeMap, N, 6.0).rgb, 0.5 / 255.0); + //vec3 cubeLightDiffuse = max(textureCubeLod(u_CubeMap, N, ROUGHNESS_MIPS).rgb, 0.5 / 255.0); //cubeLightColor /= dot(cubeLightDiffuse, vec3(0.2125, 0.7154, 0.0721)); #if defined(USE_PBR) diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index 683e173d..8c40573e 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -325,6 +325,20 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha if (r_pbr->integer) Q_strcat(dest, size, "#define USE_PBR\n"); + if (r_cubeMapping->integer) + { + int cubeMipSize = r_cubemapSize->integer; + int numRoughnessMips = 0; + + while (cubeMipSize) + { + cubeMipSize >>= 1; + numRoughnessMips++; + } + numRoughnessMips = MAX(1, numRoughnessMips - 2); + Q_strcat(dest, size, va("#define ROUGHNESS_MIPS float(%d)\n", numRoughnessMips)); + } + if (extra) { Q_strcat(dest, size, extra); From 398dea397c7d035f0a95cfce555550c276c21a26 Mon Sep 17 00:00:00 2001 From: Victor Roemer Date: Sun, 12 Jun 2016 17:06:54 -0400 Subject: [PATCH 125/480] Fix Makefile for OSX Bump base SDK from 10.5 -> 10.7 Just use the builtin __APPLE__ --- Makefile | 24 +++++++++--------------- code/client/cl_curl.h | 2 +- code/client/cl_main.c | 4 ++-- code/client/qal.h | 3 ++- code/client/snd_mix.c | 2 +- code/client/snd_openal.c | 6 +++--- code/qcommon/files.c | 4 ++-- code/qcommon/net_ip.c | 2 +- code/qcommon/q_platform.h | 9 ++------- code/qcommon/qcommon.h | 2 +- code/renderergl1/tr_shade.c | 2 +- code/renderergl1/tr_shade_calc.c | 2 +- code/renderergl1/tr_surface.c | 2 +- code/renderergl2/tr_shade.c | 2 +- code/renderergl2/tr_shade_calc.c | 2 +- code/renderergl2/tr_surface.c | 2 +- code/sdl/sdl_input.c | 2 +- code/sys/sys_local.h | 2 +- code/sys/sys_main.c | 4 ++-- code/sys/sys_osx.m | 2 +- code/sys/sys_unix.c | 6 +++--- code/tools/lcc/cpp/unix.c | 2 +- 22 files changed, 39 insertions(+), 49 deletions(-) diff --git a/Makefile b/Makefile index 799780bf..12035172 100644 --- a/Makefile +++ b/Makefile @@ -3,18 +3,12 @@ # # GNU Make required # - -COMPILE_PLATFORM=$(shell uname|sed -e s/_.*//|tr '[:upper:]' '[:lower:]'|sed -e 's/\//_/g') - -COMPILE_ARCH=$(shell uname -m | sed -e s/i.86/x86/ | sed -e 's/^arm.*/arm/') +COMPILE_PLATFORM=$(shell uname | sed -e 's/_.*//' | tr '[:upper:]' '[:lower:]' | sed -e 's/\//_/g') +COMPILE_ARCH=$(shell uname -m | sed -e 's/i.86/x86/' | sed -e 's/^arm.*/arm/') ifeq ($(COMPILE_PLATFORM),sunos) # Solaris uname and GNU uname differ - COMPILE_ARCH=$(shell uname -p | sed -e s/i.86/x86/) -endif -ifeq ($(COMPILE_PLATFORM),darwin) - # Apple does some things a little differently... - COMPILE_ARCH=$(shell uname -p | sed -e s/i.86/x86/) + COMPILE_ARCH=$(shell uname -p | sed -e 's/i.86/x86/') endif ifndef BUILD_STANDALONE @@ -231,7 +225,7 @@ USE_RENDERER_DLOPEN=1 endif ifndef DEBUG_CFLAGS -DEBUG_CFLAGS=-g -O0 +DEBUG_CFLAGS=-ggdb -O0 endif ############################################################################# @@ -408,8 +402,7 @@ ifeq ($(PLATFORM),darwin) RENDERER_LIBS= OPTIMIZEVM= - BASE_CFLAGS = -Wall -Wimplicit -Wstrict-prototypes -mmacosx-version-min=10.5 \ - -DMAC_OS_X_VERSION_MIN_REQUIRED=1050 + BASE_CFLAGS += -mmacosx-version-min=10.7 -DMAC_OS_X_VERSION_MIN_REQUIRED=1070 ifeq ($(ARCH),ppc) BASE_CFLAGS += -arch ppc -faltivec @@ -447,11 +440,9 @@ ifeq ($(PLATFORM),darwin) $(error Architecture $(ARCH) is not supported when cross compiling) endif endif - else - TOOLS_CFLAGS += -DMACOS_X endif - BASE_CFLAGS += -fno-strict-aliasing -DMACOS_X -fno-common -pipe + BASE_CFLAGS += -fno-strict-aliasing -fno-common -pipe ifeq ($(USE_OPENAL),1) ifneq ($(USE_OPENAL_DLOPEN),1) @@ -468,6 +459,9 @@ ifeq ($(PLATFORM),darwin) BASE_CFLAGS += -D_THREAD_SAFE=1 + # FIXME: It is not possible to build using system SDL2 framework + # 1. IF you try, this Makefile will still drop libSDL-2.0.0.dylib into the builddir + # 2. Debugger warns that you have 2- which one will be used is undefined ifeq ($(USE_LOCAL_HEADERS),1) BASE_CFLAGS += -I$(SDLHDIR)/include endif diff --git a/code/client/cl_curl.h b/code/client/cl_curl.h index c91bcf82..1c0be55a 100644 --- a/code/client/cl_curl.h +++ b/code/client/cl_curl.h @@ -37,7 +37,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #ifdef WIN32 #define DEFAULT_CURL_LIB "libcurl-4.dll" #define ALTERNATE_CURL_LIB "libcurl-3.dll" -#elif defined(MACOS_X) +#elif defined(__APPLE__) #define DEFAULT_CURL_LIB "libcurl.dylib" #else #define DEFAULT_CURL_LIB "libcurl.so.4" diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 5ede69dd..0c7142c3 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -3554,7 +3554,7 @@ void CL_Init( void ) { #endif cl_conXOffset = Cvar_Get ("cl_conXOffset", "0", 0); -#ifdef MACOS_X +#ifdef __APPLE__ // In game video is REALLY slow in Mac OS X right now due to driver slowness cl_inGameVideo = Cvar_Get ("r_inGameVideo", "0", CVAR_ARCHIVE); #else @@ -3571,7 +3571,7 @@ void CL_Init( void ) { m_yaw = Cvar_Get ("m_yaw", "0.022", CVAR_ARCHIVE); m_forward = Cvar_Get ("m_forward", "0.25", CVAR_ARCHIVE); m_side = Cvar_Get ("m_side", "0.25", CVAR_ARCHIVE); -#ifdef MACOS_X +#ifdef __APPLE__ // Input is jittery on OS X w/o this m_filter = Cvar_Get ("m_filter", "1", CVAR_ARCHIVE); #else diff --git a/code/client/qal.h b/code/client/qal.h index 5a25ec40..a478eb53 100644 --- a/code/client/qal.h +++ b/code/client/qal.h @@ -37,8 +37,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "../AL/al.h" #include "../AL/alc.h" #else -#ifdef _MSC_VER +#if defined(_MSC_VER) || defined(__APPLE__) // MSVC users must install the OpenAL SDK which doesn't use the AL/*.h scheme. + // OSX framework also needs this #include #include #else diff --git a/code/client/snd_mix.c b/code/client/snd_mix.c index 943c50fa..4418d22d 100644 --- a/code/client/snd_mix.c +++ b/code/client/snd_mix.c @@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "client.h" #include "snd_local.h" -#if idppc_altivec && !defined(MACOS_X) +#if idppc_altivec && !defined(__APPLE__) #include #endif diff --git a/code/client/snd_openal.c b/code/client/snd_openal.c index fa5a721a..2a4fb0a2 100644 --- a/code/client/snd_openal.c +++ b/code/client/snd_openal.c @@ -582,7 +582,7 @@ typedef struct src_s qboolean local; // Is this local (relative to the cam) } src_t; -#ifdef MACOS_X +#ifdef __APPLE__ #define MAX_SRC 64 #else #define MAX_SRC 128 @@ -2208,7 +2208,7 @@ static cvar_t *s_alCapture; #ifdef _WIN32 #define ALDRIVER_DEFAULT "OpenAL32.dll" -#elif defined(MACOS_X) +#elif defined(__APPLE__) #define ALDRIVER_DEFAULT "/System/Library/Frameworks/OpenAL.framework/OpenAL" #elif defined(__OpenBSD__) #define ALDRIVER_DEFAULT "libopenal.so" @@ -2642,7 +2642,7 @@ qboolean S_AL_Init( soundInterface_t *si ) #endif else { -#ifdef MACOS_X +#ifdef __APPLE__ // !!! FIXME: Apple has a 1.1-compliant OpenAL, which includes // !!! FIXME: capture support, but they don't list it in the // !!! FIXME: extension string. We need to check the version string, diff --git a/code/qcommon/files.c b/code/qcommon/files.c index 77dfd295..3b4a8aeb 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -246,7 +246,7 @@ static char fs_gamedir[MAX_OSPATH]; // this will be a single file name with no static cvar_t *fs_debug; static cvar_t *fs_homepath; -#ifdef MACOS_X +#ifdef __APPLE__ // Also search the .app bundle for .pk3 files static cvar_t *fs_apppath; #endif @@ -3319,7 +3319,7 @@ static void FS_Startup( const char *gameName ) } // fs_homepath is somewhat particular to *nix systems, only add if relevant -#ifdef MACOS_X +#ifdef __APPLE__ fs_apppath = Cvar_Get ("fs_apppath", Sys_DefaultAppPath(), CVAR_INIT|CVAR_PROTECTED ); // Make MacOSX also include the base path included with the .app bundle if (fs_apppath->string[0]) diff --git a/code/qcommon/net_ip.c b/code/qcommon/net_ip.c index 98555b99..bcccda20 100644 --- a/code/qcommon/net_ip.c +++ b/code/qcommon/net_ip.c @@ -1268,7 +1268,7 @@ static void NET_AddLocalAddress(char *ifname, struct sockaddr *addr, struct sock } } -#if defined(__linux__) || defined(MACOSX) || defined(__BSD__) +#if defined(__linux__) || defined(__APPLE__) || defined(__BSD__) static void NET_GetLocalAddress(void) { struct ifaddrs *ifap, *search; diff --git a/code/qcommon/q_platform.h b/code/qcommon/q_platform.h index 3ed5357f..27ca856e 100644 --- a/code/qcommon/q_platform.h +++ b/code/qcommon/q_platform.h @@ -46,7 +46,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define idppc 1 #if defined(__VEC__) #define idppc_altivec 1 -#ifdef MACOS_X // Apple's GCC does this differently than the FSF. +#ifdef __APPLE__ // Apple's GCC does this differently than the FSF. #define VECCONST_UINT8(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) \ (vector unsigned char) (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) #else @@ -139,12 +139,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA //============================================================== MAC OS X === -#if defined(MACOS_X) || defined(__APPLE_CC__) - -// make sure this is defined, just for sanity's sake... -#ifndef MACOS_X -#define MACOS_X -#endif +#if defined(__APPLE__) || defined(__APPLE_CC__) #define OS_STRING "macosx" #define ID_INLINE inline diff --git a/code/qcommon/qcommon.h b/code/qcommon/qcommon.h index 70f1e6c1..b965690b 100644 --- a/code/qcommon/qcommon.h +++ b/code/qcommon/qcommon.h @@ -1108,7 +1108,7 @@ void Sys_SetDefaultInstallPath(const char *path); char *Sys_DefaultInstallPath(void); char *Sys_SteamPath(void); -#ifdef MACOS_X +#ifdef __APPLE__ char *Sys_DefaultAppPath(void); #endif diff --git a/code/renderergl1/tr_shade.c b/code/renderergl1/tr_shade.c index 9bdf1e39..d26cb1ac 100644 --- a/code/renderergl1/tr_shade.c +++ b/code/renderergl1/tr_shade.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // tr_shade.c #include "tr_local.h" -#if idppc_altivec && !defined(MACOS_X) +#if idppc_altivec && !defined(__APPLE__) #include #endif diff --git a/code/renderergl1/tr_shade_calc.c b/code/renderergl1/tr_shade_calc.c index ae33c7fb..82f7c0cc 100644 --- a/code/renderergl1/tr_shade_calc.c +++ b/code/renderergl1/tr_shade_calc.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // tr_shade_calc.c #include "tr_local.h" -#if idppc_altivec && !defined(MACOS_X) +#if idppc_altivec && !defined(__APPLE__) #include #endif diff --git a/code/renderergl1/tr_surface.c b/code/renderergl1/tr_surface.c index 79852f05..c4a1b2d9 100644 --- a/code/renderergl1/tr_surface.c +++ b/code/renderergl1/tr_surface.c @@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // tr_surf.c #include "tr_local.h" -#if idppc_altivec && !defined(MACOS_X) +#if idppc_altivec && !defined(__APPLE__) #include #endif diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index b49e9146..eb8688e9 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // tr_shade.c #include "tr_local.h" -#if idppc_altivec && !defined(MACOS_X) +#if idppc_altivec && !defined(__APPLE__) #include #endif diff --git a/code/renderergl2/tr_shade_calc.c b/code/renderergl2/tr_shade_calc.c index bb16bb0d..dcb99945 100644 --- a/code/renderergl2/tr_shade_calc.c +++ b/code/renderergl2/tr_shade_calc.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // tr_shade_calc.c #include "tr_local.h" -#if idppc_altivec && !defined(MACOS_X) +#if idppc_altivec && !defined(__APPLE__) #include #endif diff --git a/code/renderergl2/tr_surface.c b/code/renderergl2/tr_surface.c index 72cd610e..f43ea6f4 100644 --- a/code/renderergl2/tr_surface.c +++ b/code/renderergl2/tr_surface.c @@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // tr_surf.c #include "tr_local.h" -#if idppc_altivec && !defined(MACOS_X) +#if idppc_altivec && !defined(__APPLE__) #include #endif diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 2afa2c16..90ad596c 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -247,7 +247,7 @@ static keyNum_t IN_TranslateSDLToQ3Key( SDL_Keysym *keysym, qboolean down ) case SDLK_LCTRL: case SDLK_RCTRL: key = K_CTRL; break; -#ifdef MACOS_X +#ifdef __APPLE__ case SDLK_RGUI: case SDLK_LGUI: key = K_COMMAND; break; #else diff --git a/code/sys/sys_local.h b/code/sys/sys_local.h index f8bd5b46..96edd98e 100644 --- a/code/sys/sys_local.h +++ b/code/sys/sys_local.h @@ -44,7 +44,7 @@ unsigned int CON_LogSize( void ); unsigned int CON_LogWrite( const char *in ); unsigned int CON_LogRead( char *out, unsigned int outSize ); -#ifdef MACOS_X +#ifdef __APPLE__ char *Sys_StripAppBundle( char *pwd ); #endif diff --git a/code/sys/sys_main.c b/code/sys/sys_main.c index 4f4c5783..8bbc3a5a 100644 --- a/code/sys/sys_main.c +++ b/code/sys/sys_main.c @@ -565,7 +565,7 @@ void Sys_ParseArgs( int argc, char **argv ) } #ifndef DEFAULT_BASEDIR -# ifdef MACOS_X +# ifdef __APPLE__ # define DEFAULT_BASEDIR Sys_StripAppBundle(Sys_BinaryPath()) # else # define DEFAULT_BASEDIR Sys_BinaryPath() @@ -646,7 +646,7 @@ int main( int argc, char **argv ) // Set the initial time base Sys_Milliseconds( ); -#ifdef MACOS_X +#ifdef __APPLE__ // This is passed if we are launched by double-clicking if ( argc >= 2 && Q_strncmp ( argv[1], "-psn", 4 ) == 0 ) argc = 1; diff --git a/code/sys/sys_osx.m b/code/sys/sys_osx.m index 30bf9322..b0ecf6a5 100644 --- a/code/sys/sys_osx.m +++ b/code/sys/sys_osx.m @@ -20,7 +20,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ -#ifndef MACOS_X +#ifndef __APPLE__ #error This file is for Mac OS X only. You probably should not compile it. #endif diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index cf980eba..0e9f99bf 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -61,7 +61,7 @@ char *Sys_DefaultHomePath(void) if( ( p = getenv( "HOME" ) ) != NULL ) { Com_sprintf(homePath, sizeof(homePath), "%s%c", p, PATH_SEP); -#ifdef MACOS_X +#ifdef __APPLE__ Q_strcat(homePath, sizeof(homePath), "Library/Application Support/"); @@ -94,7 +94,7 @@ char *Sys_SteamPath( void ) if( ( p = getenv( "HOME" ) ) != NULL ) { -#ifdef MACOS_X +#ifdef __APPLE__ char *steamPathEnd = "/Library/Application Support/Steam/SteamApps/common/" STEAMPATH_NAME; #else char *steamPathEnd = "/.steam/steam/SteamApps/common/" STEAMPATH_NAME; @@ -577,7 +577,7 @@ void Sys_ErrorDialog( const char *error ) close( f ); } -#ifndef MACOS_X +#ifndef __APPLE__ static char execBuffer[ 1024 ]; static char *execBufferPointer; static char *execArgv[ 16 ]; diff --git a/code/tools/lcc/cpp/unix.c b/code/tools/lcc/cpp/unix.c index 75e5b6d3..bac841d8 100644 --- a/code/tools/lcc/cpp/unix.c +++ b/code/tools/lcc/cpp/unix.c @@ -106,7 +106,7 @@ char *basepath( char *fname ) all and others do a terrible job (like calling malloc) */ // -- ouch, that hurts -- ln /* always use the system memmove() on Mac OS X. --ryan. */ -#if !defined(MACOS_X) && !defined(_MSC_VER) +#if !defined(__APPLE__) && !defined(_MSC_VER) #ifdef memmove #undef memmove #endif From 3041322f29b1228591805b38f7b5b4e8602f6109 Mon Sep 17 00:00:00 2001 From: Thilo Schulz Date: Wed, 15 Jun 2016 17:48:13 +0200 Subject: [PATCH 126/480] Add temporary backup text files to .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e0b21e44..5ce3998f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ build Makefile.local *.swp *tags +*~ # OS X #################### @@ -22,7 +23,6 @@ Icon? *.user *.xcuserstate *.moved-aside -*~.nib .idea/ DerivedData/ project.xcworkspace/ From ef2184df1c470a7a203f437bb53c0e03f3d579d3 Mon Sep 17 00:00:00 2001 From: Thilo Schulz Date: Wed, 15 Jun 2016 18:58:44 +0200 Subject: [PATCH 127/480] Erroneously removed that line in .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5ce3998f..4e5fede8 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ Icon? *.user *.xcuserstate *.moved-aside +*~.nib .idea/ DerivedData/ project.xcworkspace/ From 420bd0916487b3939db2a0097e7b50aa1d572276 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 10 Jun 2016 06:56:53 -0500 Subject: [PATCH 128/480] OpenGL2: Remove loading (unused) glDrawBuffersARB --- code/renderercommon/qgl.h | 23 ----------------------- code/renderergl2/tr_extensions.c | 17 ----------------- 2 files changed, 40 deletions(-) diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h index 971684fb..46ece094 100644 --- a/code/renderercommon/qgl.h +++ b/code/renderercommon/qgl.h @@ -693,29 +693,6 @@ extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLs #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F #endif -// GL_ARB_draw_buffers -extern void (APIENTRY * qglDrawBuffersARB)(GLsizei n, const GLenum *bufs); -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers -#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 -#endif - #ifndef GL_ARB_depth_clamp #define GL_ARB_depth_clamp #define GL_DEPTH_CLAMP 0x864F diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index b33968d4..bb39b468 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -176,9 +176,6 @@ void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, G void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -// GL_ARB_draw_buffers -void (APIENTRY * qglDrawBuffersARB)(GLsizei n, const GLenum *bufs); - // GL_ARB_vertex_array_object void (APIENTRY * qglBindVertexArrayARB)(GLuint array); void (APIENTRY * qglDeleteVertexArraysARB)(GLsizei n, const GLuint *arrays); @@ -692,20 +689,6 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } - // GL_ARB_draw_buffers - extension = "GL_ARB_draw_buffers"; - qglDrawBuffersARB = NULL; - if( GLimp_HaveExtension( extension ) ) - { - qglDrawBuffersARB = (void *) SDL_GL_GetProcAddress("glDrawBuffersARB"); - - ri.Printf(PRINT_ALL, result[1], extension); - } - else - { - ri.Printf(PRINT_ALL, result[2], extension); - } - // GL_ARB_depth_clamp extension = "GL_ARB_depth_clamp"; glRefConfig.depthClamp = qfalse; From 0334f4a59b7a4d02ba9175095719194691d8a8bd Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 10 Jun 2016 07:00:18 -0500 Subject: [PATCH 129/480] OpenGL2: Remove duplicate textureFloat = qfalse glRefConfig.textureFloat is set to qfalse near wrong extension and then farther down by the correct extension. Removing this has no effect. --- code/renderergl2/tr_extensions.c | 1 - 1 file changed, 1 deletion(-) diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index bb39b468..faa0114b 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -468,7 +468,6 @@ void GLimp_InitExtraExtensions() // GL_ARB_shading_language_100 extension = "GL_ARB_shading_language_100"; - glRefConfig.textureFloat = qfalse; if( GLimp_HaveExtension( extension ) ) { char version[256]; From 780f0a5d3ef4a24147de819f7fa5cf18d494f86a Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Wed, 15 Jun 2016 13:26:08 -0500 Subject: [PATCH 130/480] Prevent CL_RunCinematic from reading cinTable[-1] At the end of CL_RunCinematic, RoQShutdown sets currentHandle to -1. This causes the return at the end to be return cinTable[-1].status. Use return FMV_EOF when RoQShutdown is called. I think FMV_EOF should be returned instead of FMV_IDLE which is set in RoQShutdown because RoQShutdown is clearing out state so it can be reused for a new cinematic. The return value isn't actually read by the ioq3 client, renderers, cgame, or ui. --- code/client/cl_cin.c | 1 + 1 file changed, 1 insertion(+) diff --git a/code/client/cl_cin.c b/code/client/cl_cin.c index be4fb1bc..327e5c37 100644 --- a/code/client/cl_cin.c +++ b/code/client/cl_cin.c @@ -1384,6 +1384,7 @@ e_status CIN_RunCinematic (int handle) RoQReset(); } else { RoQShutdown(); + return FMV_EOF; } } From 9f6c4942ee0b57de5991112a0d70f277204090eb Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Thu, 4 Feb 2016 21:01:37 -0600 Subject: [PATCH 131/480] Remove note that r_allowResize requires SDL backend --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 426e5c95..a5dacc9c 100644 --- a/README.md +++ b/README.md @@ -244,7 +244,7 @@ The defaults for these variables differ depending on the target platform. ipv6 servers on the local network net_mcastiface - outgoing interface to use for scan - r_allowResize - make window resizable (SDL only) + r_allowResize - make window resizable r_ext_texture_filter_anisotropic - anisotropic texture filtering r_zProj - distance of observer camera to projection plane in quake3 standard units From bb7ad5538298e4b1e9470355992ec597405df46c Mon Sep 17 00:00:00 2001 From: Thilo Schulz Date: Thu, 16 Jun 2016 02:30:14 +0200 Subject: [PATCH 132/480] Only play logo/intro if their filenames have been defined in q_shared.h --- code/qcommon/common.c | 6 ++++++ code/ui/ui_main.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/code/qcommon/common.c b/code/qcommon/common.c index c3c595b5..1d4ef611 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -72,7 +72,9 @@ cvar_t *com_showtrace; cvar_t *com_version; cvar_t *com_blood; cvar_t *com_buildScript; // for automated data building scripts +#ifdef CINEMATICS_INTRO cvar_t *com_introPlayed; +#endif cvar_t *cl_paused; cvar_t *sv_paused; cvar_t *cl_packetdelay; @@ -2805,11 +2807,15 @@ void Com_Init( char *commandLine ) { if ( !Com_AddStartupCommands() ) { // if the user didn't give any commands, run default action if ( !com_dedicated->integer ) { +#ifdef CINEMATICS_LOGO Cbuf_AddText ("cinematic " CINEMATICS_LOGO "\n"); +#endif +#ifdef CINEMATICS_INTRO if( !com_introPlayed->integer ) { Cvar_Set( com_introPlayed->name, "1" ); Cvar_Set( "nextmap", "cinematic " CINEMATICS_INTRO ); } +#endif } } diff --git a/code/ui/ui_main.c b/code/ui/ui_main.c index c1cdf740..a1539f33 100644 --- a/code/ui/ui_main.c +++ b/code/ui/ui_main.c @@ -3222,7 +3222,9 @@ static void UI_RunMenuScript(char **args) { trap_Cmd_ExecuteText( EXEC_APPEND, "exec default.cfg\n"); trap_Cmd_ExecuteText( EXEC_APPEND, "cvar_restart\n"); Controls_SetDefaults(); +#ifdef CINEMATICS_INTRO trap_Cvar_Set("com_introPlayed", "1" ); +#endif trap_Cmd_ExecuteText( EXEC_APPEND, "vid_restart\n" ); } else if (Q_stricmp(name, "getCDKey") == 0) { char out[17]; From 9d6a95d4ad141237e21e5c57281b099bbc27a072 Mon Sep 17 00:00:00 2001 From: Thilo Schulz Date: Thu, 16 Jun 2016 03:29:02 +0200 Subject: [PATCH 133/480] Missed this Cvar_Get() on com_introPlayed --- code/qcommon/common.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 1d4ef611..84b5f628 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -2756,7 +2756,9 @@ void Com_Init( char *commandLine ) { com_busyWait = Cvar_Get("com_busyWait", "0", CVAR_ARCHIVE); Cvar_Get("com_errorMessage", "", CVAR_ROM | CVAR_NORESTART); +#ifdef CINEMATICS_INTRO com_introPlayed = Cvar_Get( "com_introplayed", "0", CVAR_ARCHIVE); +#endif s = va("%s %s %s", Q3_VERSION, PLATFORM_STRING, __DATE__ ); com_version = Cvar_Get ("version", s, CVAR_ROM | CVAR_SERVERINFO ); From 274fa898b1cbadd444a2641c93c0f7daadba9af6 Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Mon, 27 Jun 2016 21:13:27 -0500 Subject: [PATCH 134/480] Fix typo of empty in ai_main.c --- code/game/ai_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/ai_main.c b/code/game/ai_main.c index b9034b88..2dacd877 100644 --- a/code/game/ai_main.c +++ b/code/game/ai_main.c @@ -256,7 +256,7 @@ void BotTestAAS(vec3_t origin) { if (bot_testsolid.integer) { if (!trap_AAS_Initialized()) return; areanum = BotPointAreaNum(origin); - if (areanum) BotAI_Print(PRT_MESSAGE, "\remtpy area"); + if (areanum) BotAI_Print(PRT_MESSAGE, "\rempty area"); else BotAI_Print(PRT_MESSAGE, "\r^1SOLID area"); } else if (bot_testclusters.integer) { From 4474297af88436d07d348a10dedb8aa65c0d9dbf Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Sun, 10 Jul 2016 00:36:21 -0500 Subject: [PATCH 135/480] Fix bot team order to kill last player it killed Bot's lastkilledplayer was set to -1 after carrying out an ordered kill. Later in BotChat_Random() the PlayerName function was passed -1 which caused a "Error: PlayerName: playernum out of range" message. I think the reason it was set to negative one is so that if the bot is ordered to kill the player again, the bot will not say it's done and drop the goal. Though, if the bot killed the player based on it's own decision, it will just say it's done and drop the goal (bug?). Let's check the time of the last kill to see if it happened since the team order was received instead of setting lastkilledplayer to -1 after completing the team ordered kill. This fixes bot dropping goal if target player was the last player they killed and the PlayerName out of range error. --- code/game/ai_dmnet.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/ai_dmnet.c b/code/game/ai_dmnet.c index 38a84a44..73bc4caf 100644 --- a/code/game/ai_dmnet.c +++ b/code/game/ai_dmnet.c @@ -573,11 +573,10 @@ int BotGetLongTermGoal(bot_state_t *bs, int tfl, int retreat, bot_goal_t *goal) bs->teammessage_time = 0; } // - if (bs->lastkilledplayer == bs->teamgoal.entitynum) { + if (bs->killedenemy_time > bs->teamgoal_time - TEAM_KILL_SOMEONE && bs->lastkilledplayer == bs->teamgoal.entitynum) { EasyClientName(bs->teamgoal.entitynum, buf, sizeof(buf)); BotAI_BotInitialChat(bs, "kill_done", buf, NULL); trap_BotEnterChat(bs->cs, bs->decisionmaker, CHAT_TELL); - bs->lastkilledplayer = -1; bs->ltgtype = 0; } // From 0ad4381a1185ed9ee964fbb8807eff66e8fe495d Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Wed, 15 Jun 2016 12:17:58 -0500 Subject: [PATCH 136/480] Make using Yacc optional, disabled by default A built-in GNU Make rule causes code/tools/lcc/lburg/gram.y to replace gram.c if gram.y has a newer modified time. This causes git diff to pick up changes to gram.c, which seems to have been manually modified to fix warnings and may vary by Yacc used to create it. It also requires installing a program to generate a file that already exists in a usable state in the code repository. So replace the built-in rule so it is only used if USE_YACC is 1 (defaults to 0). The Yacc executable name can be overriden using `make YACC=yacc` like before. I preferred to touch gram.c instead of installing Yacc because of the problems it causes. It doesn't really seem like a good idea to recommend others do that instead of disabling Yacc the Makefile though. --- Makefile | 20 ++++++++++++++++++++ README.md | 1 + 2 files changed, 21 insertions(+) diff --git a/Makefile b/Makefile index 12035172..fb7efd08 100644 --- a/Makefile +++ b/Makefile @@ -224,6 +224,10 @@ ifndef USE_RENDERER_DLOPEN USE_RENDERER_DLOPEN=1 endif +ifndef USE_YACC +USE_YACC=0 +endif + ifndef DEBUG_CFLAGS DEBUG_CFLAGS=-ggdb -O0 endif @@ -1351,6 +1355,10 @@ ifndef TOOLS_CC TOOLS_CC = gcc endif +ifndef YACC + YACC = yacc +endif + TOOLS_OPTIMIZE = -g -Wall -fno-strict-aliasing TOOLS_CFLAGS += $(TOOLS_OPTIMIZE) \ -DTEMPDIR=\"$(TEMPDIR)\" -DSYSTEM=\"\" \ @@ -1363,6 +1371,12 @@ ifeq ($(GENERATE_DEPENDENCIES),1) TOOLS_CFLAGS += -MMD endif +define DO_YACC +$(echo_cmd) "YACC $<" +$(Q)$(YACC) $< +$(Q)mv -f y.tab.c $@ +endef + define DO_TOOLS_CC $(echo_cmd) "TOOLS_CC $<" $(Q)$(TOOLS_CC) $(TOOLS_CFLAGS) -o $@ -c $< @@ -1384,6 +1398,12 @@ LBURGOBJ= \ $(B)/tools/lburg/lburg.o \ $(B)/tools/lburg/gram.o +# override GNU Make built-in rule for converting gram.y to gram.c +%.c: %.y +ifeq ($(USE_YACC),1) + $(DO_YACC) +endif + $(B)/tools/lburg/%.o: $(LBURGDIR)/%.c $(DO_TOOLS_CC) diff --git a/README.md b/README.md index a5dacc9c..3e004ad8 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,7 @@ Makefile.local: SERVERBIN - rename 'ioq3ded' server binary CLIENTBIN - rename 'ioquake3' client binary USE_RENDERER_DLOPEN - build and use the renderer in a library + USE_YACC - use yacc to update code/tools/lcc/lburg/gram.c BASEGAME - rename 'baseq3' BASEGAME_CFLAGS - custom CFLAGS for basegame MISSIONPACK - rename 'missionpack' From ebc78947770a4a918be357e2731241e3ab6ec0b0 Mon Sep 17 00:00:00 2001 From: James Canete Date: Mon, 11 Jul 2016 20:47:39 -0700 Subject: [PATCH 137/480] Fix OpenGL2 readme missing text in md --- opengl2-readme.md | 68 +++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/opengl2-readme.md b/opengl2-readme.md index d2757d4b..bbddc36c 100644 --- a/opengl2-readme.md +++ b/opengl2-readme.md @@ -1,4 +1,4 @@ -OpenGL2 +# OpenGL2 OpenGL2 is an alternate renderer for ioquake3. It aims to implement modern @@ -398,7 +398,7 @@ The first thing to notice is that this is basically the same as old Quake 3 shader files. The next thing to notice are the new keywords. Here is what they mean: - stage + `stage ` - State how this imagemap will be used by OpenGL2: diffuseMap - Standard, same as no stage entry normalMap - Image will be used as a normal map @@ -407,7 +407,7 @@ they mean: specularMap - Image will be used as a specular map with alpha treated as shininess. - specularReflectance + `specularReflectance ` - State how metallic this material is. Metals typically have a high specular and a low diffuse, so this is typically high for them, and low for other materials, such as plastic. For typical values for various @@ -415,18 +415,18 @@ they mean: down to the reflection calculator and look up its reflectance. Default is 0.04, since most materials aren't metallic. - specularExponent + `specularExponent ` - State how shiny this material is. Note that this is modulated by the alpha channel of the specular map, so if it were set to 16, and the alpha channel of the specular map was set to 0.5, then the shininess would be set to 8. Default 256. - normalScale + `normalScale ` - State the X and Y scales of the normal map. This is useful for increasing or decreasing the "strength" of the normal map, or entering negative values to flip the X and/or Y values. Default 1 1. - parallaxDepth + `parallaxDepth ` - State the maximum depth of the parallax map. This is a fairly sensitive value, and I recommend the default or lower. Default 0.05. @@ -506,8 +506,7 @@ and is the equivalent for 'exactVertex'. This adds a new keyword to sky materials, q3gl2_sun. The syntax is: - q3gl2_sun - + q3gl2_sun Note the first six parameters are the same as in q3map_sun or q3map_sunExt, and the last two indicate scaling factors for the map brightness and an ambient @@ -519,21 +518,21 @@ There are currently two ways to use this in your own (and other people's) maps. 'q3gl2_sun' line after your 'q3map_sun' line in your sky material, like so: - textures/skies/bluesky - { - qer_editorimage textures/skies/bluesky.jpg + textures/skies/bluesky + { + qer_editorimage textures/skies/bluesky.jpg - surfaceparm nomarks - surfaceparm noimpact - surfaceparm nolightmap - surfaceparm sky - q3map_sunExt 240 238 200 100 195 35 3 16 - q3gl2_sun 240 238 200 50 195 35 1.0 0.2 - q3map_skylight 50 16 - q3map_lightimage $whiteimage + surfaceparm nomarks + surfaceparm noimpact + surfaceparm nolightmap + surfaceparm sky + q3map_sunExt 240 238 200 100 195 35 3 16 + q3gl2_sun 240 238 200 50 195 35 1.0 0.2 + q3map_skylight 50 16 + q3map_lightimage $whiteimage - skyparms env/bluesky - - - } + skyparms env/bluesky - - + } The advantages with this method are that your map will continue to work with the old renderer with the sunlight baked into the lightmap, and it @@ -543,20 +542,20 @@ There are currently two ways to use this in your own (and other people's) maps. 2. Set r_sunlightMode to 2 and use 'q3gl2_sun' instead of 'q3map_sun' or 'q3map_sunExt', like so: - textures/skies/bluesky - { - qer_editorimage textures/skies/bluesky.jpg + textures/skies/bluesky + { + qer_editorimage textures/skies/bluesky.jpg - surfaceparm nomarks - surfaceparm noimpact - surfaceparm nolightmap - surfaceparm sky - q3gl2_sun 240 238 200 50 195 35 0.5 0.2 - q3map_skylight 50 16 - q3map_lightimage $whiteimage + surfaceparm nomarks + surfaceparm noimpact + surfaceparm nolightmap + surfaceparm sky + q3gl2_sun 240 238 200 50 195 35 0.5 0.2 + q3map_skylight 50 16 + q3map_lightimage $whiteimage - skyparms env/bluesky - - - } + skyparms env/bluesky - - + } The advantages with this method are that you don't get the artifacts that characterize the other method, and your map compiles a lot faster without @@ -571,8 +570,7 @@ There are currently two ways to use this in your own (and other people's) maps. This adds a new keyword to sky materials, q3gl2_tonemap. The syntax is: - q3gl2_tonemap - + q3gl2_tonemap Each of these settings corresponds to a matching cvar, so you can view and adjust the effect before settling on fixed settings. From 251c98368132fad43245f9c1c9cbe23bec7bcf40 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Sun, 24 Jul 2016 21:29:13 -0700 Subject: [PATCH 138/480] OpenGL2: Require OpenGL 2.0. --- code/renderercommon/qgl.h | 160 +++------- code/renderergl2/tr_backend.c | 6 +- code/renderergl2/tr_dsa.c | 38 +-- code/renderergl2/tr_dsa.h | 2 +- code/renderergl2/tr_extensions.c | 477 +++++++----------------------- code/renderergl2/tr_glsl.c | 126 ++++---- code/renderergl2/tr_init.c | 8 +- code/renderergl2/tr_local.h | 10 +- code/renderergl2/tr_postprocess.c | 4 +- code/renderergl2/tr_shade.c | 6 +- code/renderergl2/tr_surface.c | 16 +- code/renderergl2/tr_vbo.c | 68 ++--- 12 files changed, 302 insertions(+), 619 deletions(-) diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h index 46ece094..9c514a99 100644 --- a/code/renderercommon/qgl.h +++ b/code/renderercommon/qgl.h @@ -377,102 +377,59 @@ extern void (APIENTRYP qglUnlockArraysEXT) (void); #define qglVertexPointer glVertexPointer #define qglViewport glViewport -// GL_EXT_draw_range_elements -extern void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +// OpenGL 1.2, was GL_EXT_draw_range_elements +extern void (APIENTRY * qglDrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -// GL_EXT_multi_draw_arrays -extern void (APIENTRY * qglMultiDrawArraysEXT) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -extern void (APIENTRY * qglMultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); +// OpenGL 1.3, was GL_ARB_texture_compression +extern void (APIENTRY * qglCompressedTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +extern void (APIENTRY * qglCompressedTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -// GL_ARB_shading_language_100 -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif +// OpenGL 1.4, was GL_EXT_multi_draw_arrays +extern void (APIENTRY * qglMultiDrawElements) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -// GL_ARB_vertex_program -extern void (APIENTRY * qglVertexAttrib4fARB) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -extern void (APIENTRY * qglVertexAttrib4fvARB) (GLuint, const GLfloat *); -extern void (APIENTRY * qglVertexAttribPointerARB) (GLuint index, GLint size, GLenum type, GLboolean normalized, - GLsizei stride, const GLvoid * pointer); -extern void (APIENTRY * qglEnableVertexAttribArrayARB) (GLuint index); -extern void (APIENTRY * qglDisableVertexAttribArrayARB) (GLuint index); +// OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query +extern void (APIENTRY * qglGenQueries) (GLsizei n, GLuint *ids); +extern void (APIENTRY * qglDeleteQueries) (GLsizei n, const GLuint *ids); +extern void (APIENTRY * qglBeginQuery) (GLenum target, GLuint id); +extern void (APIENTRY * qglEndQuery) (GLenum target); +extern void (APIENTRY * qglGetQueryObjectiv) (GLuint id, GLenum pname, GLint *params); +extern void (APIENTRY * qglGetQueryObjectuiv) (GLuint id, GLenum pname, GLuint *params); +extern void (APIENTRY * qglBindBuffer) (GLenum target, GLuint buffer); +extern void (APIENTRY * qglDeleteBuffers) (GLsizei n, const GLuint *buffers); +extern void (APIENTRY * qglGenBuffers) (GLsizei n, GLuint *buffers); +extern void (APIENTRY * qglBufferData) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +extern void (APIENTRY * qglBufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -// GL_ARB_vertex_buffer_object -extern void (APIENTRY * qglBindBufferARB) (GLenum target, GLuint buffer); -extern void (APIENTRY * qglDeleteBuffersARB) (GLsizei n, const GLuint * buffers); -extern void (APIENTRY * qglGenBuffersARB) (GLsizei n, GLuint * buffers); -extern GLboolean(APIENTRY * qglIsBufferARB) (GLuint buffer); -extern void (APIENTRY * qglBufferDataARB) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); -extern void (APIENTRY * qglBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); -extern void (APIENTRY * qglGetBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); -extern void (APIENTRY * qglGetBufferParameterivARB) (GLenum target, GLenum pname, GLint * params); -extern void (APIENTRY * qglGetBufferPointervARB) (GLenum target, GLenum pname, GLvoid * *params); - -// GL_ARB_shader_objects -extern void (APIENTRY * qglDeleteObjectARB) (GLhandleARB obj); -extern GLhandleARB(APIENTRY * qglGetHandleARB) (GLenum pname); -extern void (APIENTRY * qglDetachObjectARB) (GLhandleARB containerObj, GLhandleARB attachedObj); -extern GLhandleARB(APIENTRY * qglCreateShaderObjectARB) (GLenum shaderType); -extern void (APIENTRY * qglShaderSourceARB) (GLhandleARB shaderObj, GLsizei count, const GLcharARB * *string, - const GLint * length); -extern void (APIENTRY * qglCompileShaderARB) (GLhandleARB shaderObj); -extern GLhandleARB(APIENTRY * qglCreateProgramObjectARB) (void); -extern void (APIENTRY * qglAttachObjectARB) (GLhandleARB containerObj, GLhandleARB obj); -extern void (APIENTRY * qglLinkProgramARB) (GLhandleARB programObj); -extern void (APIENTRY * qglUseProgramObjectARB) (GLhandleARB programObj); -extern void (APIENTRY * qglValidateProgramARB) (GLhandleARB programObj); -extern void (APIENTRY * qglUniform1fARB) (GLint location, GLfloat v0); -extern void (APIENTRY * qglUniform2fARB) (GLint location, GLfloat v0, GLfloat v1); -extern void (APIENTRY * qglUniform3fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -extern void (APIENTRY * qglUniform4fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -extern void (APIENTRY * qglUniform1iARB) (GLint location, GLint v0); -extern void (APIENTRY * qglUniform2iARB) (GLint location, GLint v0, GLint v1); -extern void (APIENTRY * qglUniform3iARB) (GLint location, GLint v0, GLint v1, GLint v2); -extern void (APIENTRY * qglUniform4iARB) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -extern void (APIENTRY * qglUniform1fvARB) (GLint location, GLsizei count, const GLfloat * value); -extern void (APIENTRY * qglUniform2fvARB) (GLint location, GLsizei count, const GLfloat * value); -extern void (APIENTRY * qglUniform3fvARB) (GLint location, GLsizei count, const GLfloat * value); -extern void (APIENTRY * qglUniform4fvARB) (GLint location, GLsizei count, const GLfloat * value); -extern void (APIENTRY * qglUniform2ivARB) (GLint location, GLsizei count, const GLint * value); -extern void (APIENTRY * qglUniform3ivARB) (GLint location, GLsizei count, const GLint * value); -extern void (APIENTRY * qglUniform4ivARB) (GLint location, GLsizei count, const GLint * value); -extern void (APIENTRY * qglUniformMatrix2fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); -extern void (APIENTRY * qglUniformMatrix3fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); -extern void (APIENTRY * qglUniformMatrix4fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); -extern void (APIENTRY * qglGetObjectParameterfvARB) (GLhandleARB obj, GLenum pname, GLfloat * params); -extern void (APIENTRY * qglGetObjectParameterivARB) (GLhandleARB obj, GLenum pname, GLint * params); -extern void (APIENTRY * qglGetInfoLogARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); -extern void (APIENTRY * qglGetAttachedObjectsARB) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, - GLhandleARB * obj); -extern GLint(APIENTRY * qglGetUniformLocationARB) (GLhandleARB programObj, const GLcharARB * name); -extern void (APIENTRY * qglGetActiveUniformARB) (GLhandleARB programObj, GLuint index, GLsizei maxIndex, GLsizei * length, - GLint * size, GLenum * type, GLcharARB * name); -extern void (APIENTRY * qglGetUniformfvARB) (GLhandleARB programObj, GLint location, GLfloat * params); -extern void (APIENTRY * qglGetUniformivARB) (GLhandleARB programObj, GLint location, GLint * params); -extern void (APIENTRY * qglGetShaderSourceARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); - -// GL_ARB_vertex_shader -extern void (APIENTRY * qglBindAttribLocationARB) (GLhandleARB programObj, GLuint index, const GLcharARB * name); -extern void (APIENTRY * qglGetActiveAttribARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, - GLint * size, GLenum * type, GLcharARB * name); -extern GLint(APIENTRY * qglGetAttribLocationARB) (GLhandleARB programObj, const GLcharARB * name); - -// GL_ARB_texture_compression -extern void (APIENTRY * qglCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, - GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -extern void (APIENTRY * qglCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, - GLint border, GLsizei imageSize, const GLvoid *data); -extern void (APIENTRY * qglCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, - GLsizei imageSize, const GLvoid *data); -extern void (APIENTRY * qglCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, - GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -extern void (APIENTRY * qglCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, - GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -extern void (APIENTRY * qglCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, - GLsizei imageSize, const GLvoid *data); -extern void (APIENTRY * qglGetCompressedTexImageARB)(GLenum target, GLint lod, - GLvoid *img); +// OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader +extern void (APIENTRY * qglAttachShader) (GLuint program, GLuint shader); +extern void (APIENTRY * qglBindAttribLocation) (GLuint program, GLuint index, const GLchar *name); +extern void (APIENTRY * qglCompileShader) (GLuint shader); +extern GLuint (APIENTRY * qglCreateProgram) (void); +extern GLuint (APIENTRY * qglCreateShader) (GLenum type); +extern void (APIENTRY * qglDeleteProgram) (GLuint program); +extern void (APIENTRY * qglDeleteShader) (GLuint shader); +extern void (APIENTRY * qglDetachShader) (GLuint program, GLuint shader); +extern void (APIENTRY * qglDisableVertexAttribArray) (GLuint index); +extern void (APIENTRY * qglEnableVertexAttribArray) (GLuint index); +extern void (APIENTRY * qglGetActiveUniform) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +extern void (APIENTRY * qglGetProgramiv) (GLuint program, GLenum pname, GLint *params); +extern void (APIENTRY * qglGetProgramInfoLog) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +extern void (APIENTRY * qglGetShaderiv) (GLuint shader, GLenum pname, GLint *params); +extern void (APIENTRY * qglGetShaderInfoLog) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +extern void (APIENTRY * qglGetShaderSource) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +extern GLint (APIENTRY * qglGetUniformLocation) (GLuint program, const GLchar *name); +extern void (APIENTRY * qglLinkProgram) (GLuint program); +extern void (APIENTRY * qglShaderSource) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); +extern void (APIENTRY * qglUseProgram) (GLuint program); +extern void (APIENTRY * qglUniform1f) (GLint location, GLfloat v0); +extern void (APIENTRY * qglUniform2f) (GLint location, GLfloat v0, GLfloat v1); +extern void (APIENTRY * qglUniform3f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +extern void (APIENTRY * qglUniform4f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +extern void (APIENTRY * qglUniform1i) (GLint location, GLint v0); +extern void (APIENTRY * qglUniform1fv) (GLint location, GLsizei count, const GLfloat *value); +extern void (APIENTRY * qglUniformMatrix4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +extern void (APIENTRY * qglValidateProgram) (GLuint program); +extern void (APIENTRY * qglVertexAttribPointer) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); // GL_NVX_gpu_memory_info #ifndef GL_NVX_gpu_memory_info @@ -609,25 +566,6 @@ extern void (APIENTRY * qglGenerateMipmapEXT)(GLenum target); #define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 #endif -// GL_ARB_occlusion_query -extern void (APIENTRY * qglGenQueriesARB)(GLsizei n, GLuint *ids); -extern void (APIENTRY * qglDeleteQueriesARB)(GLsizei n, const GLuint *ids); -extern GLboolean (APIENTRY * qglIsQueryARB)(GLuint id); -extern void (APIENTRY * qglBeginQueryARB)(GLenum target, GLuint id); -extern void (APIENTRY * qglEndQueryARB)(GLenum target); -extern void (APIENTRY * qglGetQueryivARB)(GLenum target, GLenum pname, GLint *params); -extern void (APIENTRY * qglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params); -extern void (APIENTRY * qglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params); - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query -#define GL_SAMPLES_PASSED_ARB 0x8914 -#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 -#endif - // GL_EXT_framebuffer_blit extern void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index 5a0eb6a7..f9dcd038 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -644,7 +644,7 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) { } if (inQuery) { - qglEndQueryARB(GL_SAMPLES_PASSED_ARB); + qglEndQuery(GL_SAMPLES_PASSED); } if (glRefConfig.framebufferObject) @@ -1195,14 +1195,14 @@ const void *RB_DrawSurfs( const void *data ) { if (glRefConfig.occlusionQuery) { tr.sunFlareQueryActive[tr.sunFlareQueryIndex] = qtrue; - qglBeginQueryARB(GL_SAMPLES_PASSED_ARB, tr.sunFlareQuery[tr.sunFlareQueryIndex]); + qglBeginQuery(GL_SAMPLES_PASSED, tr.sunFlareQuery[tr.sunFlareQueryIndex]); } RB_DrawSun(0.3, tr.sunFlareShader); if (glRefConfig.occlusionQuery) { - qglEndQueryARB(GL_SAMPLES_PASSED_ARB); + qglEndQuery(GL_SAMPLES_PASSED); } FBO_Bind(oldFbo); diff --git a/code/renderergl2/tr_dsa.c b/code/renderergl2/tr_dsa.c index 9cd481bd..4ea76996 100644 --- a/code/renderergl2/tr_dsa.c +++ b/code/renderergl2/tr_dsa.c @@ -124,7 +124,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, G GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) { GL_BindMultiTexture(glDsaState.texunit, target, texture); - qglCompressedTexImage2DARB(target, level, internalformat, width, height, border, imageSize, data); + qglCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); } GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level, @@ -132,7 +132,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLsizei imageSize, const GLvoid *data) { GL_BindMultiTexture(glDsaState.texunit, target, texture); - qglCompressedTexSubImage2DARB(target, level, xoffset, yoffset, width, height, format, imageSize, data); + qglCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); } GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target) @@ -143,66 +143,66 @@ GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target) void GL_BindNullProgram() { - qglUseProgramObjectARB(0); + qglUseProgram(0); glDsaState.program = 0; } -int GL_UseProgramObject(GLuint program) +int GL_UseProgram(GLuint program) { if (glDsaState.program == program) return 0; - qglUseProgramObjectARB(program); + qglUseProgram(program); glDsaState.program = program; return 1; } GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0) { - GL_UseProgramObject(program); - qglUniform1iARB(location, v0); + GL_UseProgram(program); + qglUniform1i(location, v0); } GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0) { - GL_UseProgramObject(program); - qglUniform1fARB(location, v0); + GL_UseProgram(program); + qglUniform1f(location, v0); } GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1) { - GL_UseProgramObject(program); - qglUniform2fARB(location, v0, v1); + GL_UseProgram(program); + qglUniform2f(location, v0, v1); } GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) { - GL_UseProgramObject(program); - qglUniform3fARB(location, v0, v1, v2); + GL_UseProgram(program); + qglUniform3f(location, v0, v1, v2); } GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { - GL_UseProgramObject(program); - qglUniform4fARB(location, v0, v1, v2, v3); + GL_UseProgram(program); + qglUniform4f(location, v0, v1, v2, v3); } GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value) { - GL_UseProgramObject(program); - qglUniform1fvARB(location, count, value); + GL_UseProgram(program); + qglUniform1fv(location, count, value); } GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { - GL_UseProgramObject(program); - qglUniformMatrix4fvARB(location, count, transpose, value); + GL_UseProgram(program); + qglUniformMatrix4fv(location, count, transpose, value); } void GL_BindNullFramebuffers() diff --git a/code/renderergl2/tr_dsa.h b/code/renderergl2/tr_dsa.h index e820fe00..5e68cafe 100644 --- a/code/renderergl2/tr_dsa.h +++ b/code/renderergl2/tr_dsa.h @@ -44,7 +44,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target); void GL_BindNullProgram(void); -int GL_UseProgramObject(GLuint program); +int GL_UseProgram(GLuint program); GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0); GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0); diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index faa0114b..d57ed6e7 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -30,101 +30,59 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "tr_local.h" #include "tr_dsa.h" -// GL_EXT_draw_range_elements -void (APIENTRY * qglDrawRangeElementsEXT) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +// OpenGL 1.2, was GL_EXT_draw_range_elements +void (APIENTRY * qglDrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -// GL_EXT_multi_draw_arrays -void (APIENTRY * qglMultiDrawArraysEXT) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -void (APIENTRY * qglMultiDrawElementsEXT) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); +// OpenGL 1.3, was GL_ARB_texture_compression +void (APIENTRY * qglCompressedTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +void (APIENTRY * qglCompressedTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -// GL_ARB_vertex_shader -void (APIENTRY * qglBindAttribLocationARB) (GLhandleARB programObj, GLuint index, const GLcharARB * name); -void (APIENTRY * qglGetActiveAttribARB) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, - GLint * size, GLenum * type, GLcharARB * name); -GLint(APIENTRY * qglGetAttribLocationARB) (GLhandleARB programObj, const GLcharARB * name); +// OpenGL 1.4, was GL_EXT_multi_draw_arrays +void (APIENTRY * qglMultiDrawElements) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -// GL_ARB_vertex_program -void (APIENTRY * qglVertexAttrib4fARB) (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); -void (APIENTRY * qglVertexAttrib4fvARB) (GLuint, const GLfloat *); -void (APIENTRY * qglVertexAttribPointerARB) (GLuint index, GLint size, GLenum type, GLboolean normalized, - GLsizei stride, const GLvoid * pointer); -void (APIENTRY * qglEnableVertexAttribArrayARB) (GLuint index); -void (APIENTRY * qglDisableVertexAttribArrayARB) (GLuint index); +// OpenGL 1.5, previously GL_ARB_vertex_buffer_object +void (APIENTRY * qglGenQueries) (GLsizei n, GLuint *ids); +void (APIENTRY * qglDeleteQueries) (GLsizei n, const GLuint *ids); +void (APIENTRY * qglBeginQuery) (GLenum target, GLuint id); +void (APIENTRY * qglEndQuery) (GLenum target); +void (APIENTRY * qglGetQueryObjectiv) (GLuint id, GLenum pname, GLint *params); +void (APIENTRY * qglGetQueryObjectuiv) (GLuint id, GLenum pname, GLuint *params); +void (APIENTRY * qglBindBuffer) (GLenum target, GLuint buffer); +void (APIENTRY * qglDeleteBuffers) (GLsizei n, const GLuint *buffers); +void (APIENTRY * qglGenBuffers) (GLsizei n, GLuint *buffers); +void (APIENTRY * qglBufferData) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +void (APIENTRY * qglBufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -// GL_ARB_vertex_buffer_object -void (APIENTRY * qglBindBufferARB) (GLenum target, GLuint buffer); -void (APIENTRY * qglDeleteBuffersARB) (GLsizei n, const GLuint * buffers); -void (APIENTRY * qglGenBuffersARB) (GLsizei n, GLuint * buffers); - -GLboolean(APIENTRY * qglIsBufferARB) (GLuint buffer); -void (APIENTRY * qglBufferDataARB) (GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); -void (APIENTRY * qglBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); -void (APIENTRY * qglGetBufferSubDataARB) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid * data); - -void (APIENTRY * qglGetBufferParameterivARB) (GLenum target, GLenum pname, GLint * params); -void (APIENTRY * qglGetBufferPointervARB) (GLenum target, GLenum pname, GLvoid * *params); - -// GL_ARB_shader_objects -void (APIENTRY * qglDeleteObjectARB) (GLhandleARB obj); - -GLhandleARB(APIENTRY * qglGetHandleARB) (GLenum pname); -void (APIENTRY * qglDetachObjectARB) (GLhandleARB containerObj, GLhandleARB attachedObj); - -GLhandleARB(APIENTRY * qglCreateShaderObjectARB) (GLenum shaderType); -void (APIENTRY * qglShaderSourceARB) (GLhandleARB shaderObj, GLsizei count, const GLcharARB * *string, - const GLint * length); -void (APIENTRY * qglCompileShaderARB) (GLhandleARB shaderObj); - -GLhandleARB(APIENTRY * qglCreateProgramObjectARB) (void); -void (APIENTRY * qglAttachObjectARB) (GLhandleARB containerObj, GLhandleARB obj); -void (APIENTRY * qglLinkProgramARB) (GLhandleARB programObj); -void (APIENTRY * qglUseProgramObjectARB) (GLhandleARB programObj); -void (APIENTRY * qglValidateProgramARB) (GLhandleARB programObj); -void (APIENTRY * qglUniform1fARB) (GLint location, GLfloat v0); -void (APIENTRY * qglUniform2fARB) (GLint location, GLfloat v0, GLfloat v1); -void (APIENTRY * qglUniform3fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void (APIENTRY * qglUniform4fARB) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void (APIENTRY * qglUniform1iARB) (GLint location, GLint v0); -void (APIENTRY * qglUniform2iARB) (GLint location, GLint v0, GLint v1); -void (APIENTRY * qglUniform3iARB) (GLint location, GLint v0, GLint v1, GLint v2); -void (APIENTRY * qglUniform4iARB) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -void (APIENTRY * qglUniform1fvARB) (GLint location, GLsizei count, const GLfloat * value); -void (APIENTRY * qglUniform2fvARB) (GLint location, GLsizei count, const GLfloat * value); -void (APIENTRY * qglUniform3fvARB) (GLint location, GLsizei count, const GLfloat * value); -void (APIENTRY * qglUniform4fvARB) (GLint location, GLsizei count, const GLfloat * value); -void (APIENTRY * qglUniform2ivARB) (GLint location, GLsizei count, const GLint * value); -void (APIENTRY * qglUniform3ivARB) (GLint location, GLsizei count, const GLint * value); -void (APIENTRY * qglUniform4ivARB) (GLint location, GLsizei count, const GLint * value); -void (APIENTRY * qglUniformMatrix2fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); -void (APIENTRY * qglUniformMatrix3fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); -void (APIENTRY * qglUniformMatrix4fvARB) (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); -void (APIENTRY * qglGetObjectParameterfvARB) (GLhandleARB obj, GLenum pname, GLfloat * params); -void (APIENTRY * qglGetObjectParameterivARB) (GLhandleARB obj, GLenum pname, GLint * params); -void (APIENTRY * qglGetInfoLogARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); -void (APIENTRY * qglGetAttachedObjectsARB) (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, - GLhandleARB * obj); -GLint(APIENTRY * qglGetUniformLocationARB) (GLhandleARB programObj, const GLcharARB * name); -void (APIENTRY * qglGetActiveUniformARB) (GLhandleARB programObj, GLuint index, GLsizei maxIndex, GLsizei * length, - GLint * size, GLenum * type, GLcharARB * name); -void (APIENTRY * qglGetUniformfvARB) (GLhandleARB programObj, GLint location, GLfloat * params); -void (APIENTRY * qglGetUniformivARB) (GLhandleARB programObj, GLint location, GLint * params); -void (APIENTRY * qglGetShaderSourceARB) (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); - -// GL_ARB_texture_compression -void (APIENTRY * qglCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, - GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -void (APIENTRY * qglCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, - GLint border, GLsizei imageSize, const GLvoid *data); -void (APIENTRY * qglCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, - GLsizei imageSize, const GLvoid *data); -void (APIENTRY * qglCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, - GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -void (APIENTRY * qglCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, - GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -void (APIENTRY * qglCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, - GLsizei imageSize, const GLvoid *data); -void (APIENTRY * qglGetCompressedTexImageARB)(GLenum target, GLint lod, - GLvoid *img); +// OpenGL 2.0, previously GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader +void (APIENTRY * qglAttachShader) (GLuint program, GLuint shader); +void (APIENTRY * qglBindAttribLocation) (GLuint program, GLuint index, const GLchar *name); +void (APIENTRY * qglCompileShader) (GLuint shader); +GLuint(APIENTRY * qglCreateProgram) (void); +GLuint(APIENTRY * qglCreateShader) (GLenum type); +void (APIENTRY * qglDeleteProgram) (GLuint program); +void (APIENTRY * qglDeleteShader) (GLuint shader); +void (APIENTRY * qglDetachShader) (GLuint program, GLuint shader); +void (APIENTRY * qglDisableVertexAttribArray) (GLuint index); +void (APIENTRY * qglEnableVertexAttribArray) (GLuint index); +void (APIENTRY * qglGetActiveUniform) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +void (APIENTRY * qglGetProgramiv) (GLuint program, GLenum pname, GLint *params); +void (APIENTRY * qglGetProgramInfoLog) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +void (APIENTRY * qglGetShaderiv) (GLuint shader, GLenum pname, GLint *params); +void (APIENTRY * qglGetShaderInfoLog) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +void (APIENTRY * qglGetShaderSource) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLint(APIENTRY * qglGetUniformLocation) (GLuint program, const GLchar *name); +void (APIENTRY * qglLinkProgram) (GLuint program); +void (APIENTRY * qglShaderSource) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); +void (APIENTRY * qglUseProgram) (GLuint program); +void (APIENTRY * qglUniform1f) (GLint location, GLfloat v0); +void (APIENTRY * qglUniform2f) (GLint location, GLfloat v0, GLfloat v1); +void (APIENTRY * qglUniform3f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +void (APIENTRY * qglUniform4f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +void (APIENTRY * qglUniform1i) (GLint location, GLint v0); +void (APIENTRY * qglUniform1fv) (GLint location, GLsizei count, const GLfloat *value); +void (APIENTRY * qglUniformMatrix4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +void (APIENTRY * qglValidateProgram) (GLuint program); +void (APIENTRY * qglVertexAttribPointer) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); // GL_EXT_framebuffer_object GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer); @@ -157,16 +115,6 @@ void (APIENTRY * qglGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenu void (APIENTRY * qglGenerateMipmapEXT)(GLenum target); -// GL_ARB_occlusion_query -void (APIENTRY * qglGenQueriesARB)(GLsizei n, GLuint *ids); -void (APIENTRY * qglDeleteQueriesARB)(GLsizei n, const GLuint *ids); -GLboolean (APIENTRY * qglIsQueryARB)(GLuint id); -void (APIENTRY * qglBeginQueryARB)(GLenum target, GLuint id); -void (APIENTRY * qglEndQueryARB)(GLenum target); -void (APIENTRY * qglGetQueryivARB)(GLenum target, GLenum pname, GLint *params); -void (APIENTRY * qglGetQueryObjectivARB)(GLuint id, GLenum pname, GLint *params); -void (APIENTRY * qglGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint *params); - // GL_EXT_framebuffer_blit void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, @@ -240,248 +188,80 @@ void GLimp_InitExtraExtensions() char *extension; const char* result[3] = { "...ignoring %s\n", "...using %s\n", "...%s not found\n" }; - // GL_EXT_draw_range_elements - extension = "GL_EXT_draw_range_elements"; - glRefConfig.drawRangeElements = qfalse; - qglMultiDrawArraysEXT = NULL; - qglMultiDrawElementsEXT = NULL; - if( GLimp_HaveExtension( extension ) ) - { - qglDrawRangeElementsEXT = (void *) SDL_GL_GetProcAddress("glDrawRangeElementsEXT"); + sscanf(glConfig.version_string, "%d.%d", &glRefConfig.openglMajorVersion, &glRefConfig.openglMinorVersion); + if (glRefConfig.openglMajorVersion < 2) + ri.Error(ERR_FATAL, "OpenGL 2.0 required!"); + ri.Printf(PRINT_ALL, "...using OpenGL %s\n", glConfig.version_string); - if ( r_ext_draw_range_elements->integer) - glRefConfig.drawRangeElements = qtrue; + // OpenGL 1.2, was GL_EXT_draw_range_elements + qglDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)SDL_GL_GetProcAddress("glDrawRangeElements"); + glRefConfig.drawRangeElements = r_ext_draw_range_elements->integer ? qtrue : qfalse; + ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glDrawRangeElements()"); - ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], extension); - } - else - { - ri.Printf(PRINT_ALL, result[2], extension); - } + // OpenGL 1.3, was GL_ARB_texture_compression + qglCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) SDL_GL_GetProcAddress("glCompressedTexImage2D"); + qglCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) SDL_GL_GetProcAddress("qglCompressedTexSubImage2D"); - // GL_EXT_multi_draw_arrays - extension = "GL_EXT_multi_draw_arrays"; - glRefConfig.multiDrawArrays = qfalse; - qglMultiDrawArraysEXT = NULL; - qglMultiDrawElementsEXT = NULL; - if( GLimp_HaveExtension( extension ) ) - { - qglMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC) SDL_GL_GetProcAddress("glMultiDrawArraysEXT"); - qglMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC) SDL_GL_GetProcAddress("glMultiDrawElementsEXT"); + // OpenGL 1.4, was GL_EXT_multi_draw_arrays + qglMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)SDL_GL_GetProcAddress("glMultiDrawElements"); + glRefConfig.drawRangeElements = r_ext_multi_draw_arrays->integer ? qtrue : qfalse; + ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glMultiDrawElements()"); - if ( r_ext_multi_draw_arrays->integer ) - glRefConfig.multiDrawArrays = qtrue; + // OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query + qglGenQueries = (PFNGLGENQUERIESPROC) SDL_GL_GetProcAddress("glGenQueries"); + qglDeleteQueries = (PFNGLDELETEQUERIESPROC) SDL_GL_GetProcAddress("glDeleteQueries"); + qglBeginQuery = (PFNGLBEGINQUERYPROC) SDL_GL_GetProcAddress("glBeginQuery"); + qglEndQuery = (PFNGLENDQUERYPROC) SDL_GL_GetProcAddress("glEndQuery"); + qglGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC) SDL_GL_GetProcAddress("glGetQueryObjectiv"); + qglGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC) SDL_GL_GetProcAddress("glGetQueryObjectuiv"); + qglBindBuffer = (PFNGLBINDBUFFERPROC) SDL_GL_GetProcAddress("glBindBuffer"); + qglDeleteBuffers = (PFNGLDELETEBUFFERSPROC) SDL_GL_GetProcAddress("glDeleteBuffers"); + qglGenBuffers = (PFNGLGENBUFFERSPROC) SDL_GL_GetProcAddress("glGenBuffers"); + qglBufferData = (PFNGLBUFFERDATAPROC) SDL_GL_GetProcAddress("glBufferData"); + qglBufferSubData = (PFNGLBUFFERSUBDATAPROC) SDL_GL_GetProcAddress("glBufferSubData"); + glRefConfig.occlusionQuery = qtrue; - ri.Printf(PRINT_ALL, result[glRefConfig.multiDrawArrays], extension); - } - else - { - ri.Printf(PRINT_ALL, result[2], extension); - } + // OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader + qglAttachShader = (PFNGLATTACHSHADERPROC) SDL_GL_GetProcAddress("glAttachShader"); + qglBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC) SDL_GL_GetProcAddress("glBindAttribLocation"); + qglCompileShader = (PFNGLCOMPILESHADERPROC) SDL_GL_GetProcAddress("glCompileShader"); + qglCreateProgram = (PFNGLCREATEPROGRAMPROC) SDL_GL_GetProcAddress("glCreateProgram"); + qglCreateShader = (PFNGLCREATESHADERPROC) SDL_GL_GetProcAddress("glCreateShader"); + qglDeleteProgram = (PFNGLDELETEPROGRAMPROC) SDL_GL_GetProcAddress("glDeleteProgram"); + qglDeleteShader = (PFNGLDELETESHADERPROC) SDL_GL_GetProcAddress("glDeleteShader"); + qglDetachShader = (PFNGLDETACHSHADERPROC) SDL_GL_GetProcAddress("glDetachShader"); + qglDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC) SDL_GL_GetProcAddress("glDisableVertexAttribArray"); + qglEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) SDL_GL_GetProcAddress("glEnableVertexAttribArray"); + qglGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) SDL_GL_GetProcAddress("glGetActiveUniform"); + qglGetProgramiv = (PFNGLGETPROGRAMIVPROC) SDL_GL_GetProcAddress("glGetProgramiv"); + qglGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) SDL_GL_GetProcAddress("glGetProgramInfoLog"); + qglGetShaderiv = (PFNGLGETSHADERIVPROC) SDL_GL_GetProcAddress("glGetShaderiv"); + qglGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) SDL_GL_GetProcAddress("glGetShaderInfoLog"); + qglGetShaderSource = (PFNGLGETSHADERSOURCEPROC) SDL_GL_GetProcAddress("glGetShaderSource"); + qglGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) SDL_GL_GetProcAddress("glGetUniformLocation"); + qglLinkProgram = (PFNGLLINKPROGRAMPROC) SDL_GL_GetProcAddress("glLinkProgram"); + qglShaderSource = (PFNGLSHADERSOURCEPROC) SDL_GL_GetProcAddress("glShaderSource"); + qglUseProgram = (PFNGLUSEPROGRAMPROC) SDL_GL_GetProcAddress("glUseProgram"); + qglUniform1f = (PFNGLUNIFORM1FPROC) SDL_GL_GetProcAddress("glUniform1f"); + qglUniform2f = (PFNGLUNIFORM2FPROC) SDL_GL_GetProcAddress("glUniform2f"); + qglUniform3f = (PFNGLUNIFORM3FPROC) SDL_GL_GetProcAddress("glUniform3f"); + qglUniform4f = (PFNGLUNIFORM4FPROC) SDL_GL_GetProcAddress("glUniform4f"); + qglUniform1i = (PFNGLUNIFORM1IPROC) SDL_GL_GetProcAddress("glUniform1i"); + qglUniform1fv = (PFNGLUNIFORM1FVPROC) SDL_GL_GetProcAddress("glUniform1fv"); + qglUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) SDL_GL_GetProcAddress("glUniformMatrix4fv"); + qglValidateProgram = (PFNGLVALIDATEPROGRAMPROC) SDL_GL_GetProcAddress("glValidateProgram"); + qglVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) SDL_GL_GetProcAddress("glVertexAttribPointer"); - // GL_ARB_vertex_program - //glRefConfig.vertexProgram = qfalse; - extension = "GL_ARB_vertex_program"; - qglVertexAttrib4fARB = NULL; - qglVertexAttrib4fvARB = NULL; - qglVertexAttribPointerARB = NULL; - qglEnableVertexAttribArrayARB = NULL; - qglDisableVertexAttribArrayARB = NULL; - if( GLimp_HaveExtension( extension ) ) - { - qglVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC) SDL_GL_GetProcAddress("glVertexAttrib4fARB"); - qglVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC) SDL_GL_GetProcAddress("glVertexAttrib4fvARB"); - qglVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC) SDL_GL_GetProcAddress("glVertexAttribPointerARB"); - qglEnableVertexAttribArrayARB = - (PFNGLENABLEVERTEXATTRIBARRAYARBPROC) SDL_GL_GetProcAddress("glEnableVertexAttribArrayARB"); - qglDisableVertexAttribArrayARB = - (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) SDL_GL_GetProcAddress("glDisableVertexAttribArrayARB"); - - ri.Printf(PRINT_ALL, result[1], extension); - //glRefConfig.vertexProgram = qtrue; - } - else - { - ri.Error(ERR_FATAL, result[2], extension); - } - - // GL_ARB_vertex_buffer_object - //glRefConfig.vertexBufferObject = qfalse; - extension = "GL_ARB_vertex_buffer_object"; - qglBindBufferARB = NULL; - qglDeleteBuffersARB = NULL; - qglGenBuffersARB = NULL; - qglIsBufferARB = NULL; - qglBufferDataARB = NULL; - qglBufferSubDataARB = NULL; - qglGetBufferSubDataARB = NULL; - qglGetBufferParameterivARB = NULL; - qglGetBufferPointervARB = NULL; - if( GLimp_HaveExtension( extension ) ) - { - qglBindBufferARB = (PFNGLBINDBUFFERARBPROC) SDL_GL_GetProcAddress("glBindBufferARB"); - qglDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) SDL_GL_GetProcAddress("glDeleteBuffersARB"); - qglGenBuffersARB = (PFNGLGENBUFFERSARBPROC) SDL_GL_GetProcAddress("glGenBuffersARB"); - qglIsBufferARB = (PFNGLISBUFFERARBPROC) SDL_GL_GetProcAddress("glIsBufferARB"); - qglBufferDataARB = (PFNGLBUFFERDATAARBPROC) SDL_GL_GetProcAddress("glBufferDataARB"); - qglBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC) SDL_GL_GetProcAddress("glBufferSubDataARB"); - qglGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC) SDL_GL_GetProcAddress("glGetBufferSubDataARB"); - qglGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC) SDL_GL_GetProcAddress("glGetBufferParameterivARB"); - qglGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC) SDL_GL_GetProcAddress("glGetBufferPointervARB"); - ri.Printf(PRINT_ALL, result[1], extension); - //glRefConfig.vertexBufferObject = qtrue; - } - else - { - ri.Error(ERR_FATAL, result[2], extension); - } - - // GL_ARB_shader_objects - extension = "GL_ARB_shader_objects"; - //glRefConfig.shaderObjects = qfalse; - qglDeleteObjectARB = NULL; - qglGetHandleARB = NULL; - qglDetachObjectARB = NULL; - qglCreateShaderObjectARB = NULL; - qglShaderSourceARB = NULL; - qglCompileShaderARB = NULL; - qglCreateProgramObjectARB = NULL; - qglAttachObjectARB = NULL; - qglLinkProgramARB = NULL; - qglUseProgramObjectARB = NULL; - qglValidateProgramARB = NULL; - qglUniform1fARB = NULL; - qglUniform2fARB = NULL; - qglUniform3fARB = NULL; - qglUniform4fARB = NULL; - qglUniform1iARB = NULL; - qglUniform2iARB = NULL; - qglUniform3iARB = NULL; - qglUniform4iARB = NULL; - qglUniform1fvARB = NULL; - qglUniform2fvARB = NULL; - qglUniform3fvARB = NULL; - qglUniform4fvARB = NULL; - qglUniform2ivARB = NULL; - qglUniform3ivARB = NULL; - qglUniform4ivARB = NULL; - qglUniformMatrix2fvARB = NULL; - qglUniformMatrix3fvARB = NULL; - qglUniformMatrix4fvARB = NULL; - qglGetObjectParameterfvARB = NULL; - qglGetObjectParameterivARB = NULL; - qglGetInfoLogARB = NULL; - qglGetAttachedObjectsARB = NULL; - qglGetUniformLocationARB = NULL; - qglGetActiveUniformARB = NULL; - qglGetUniformfvARB = NULL; - qglGetUniformivARB = NULL; - qglGetShaderSourceARB = NULL; - if( GLimp_HaveExtension( extension ) ) - { - qglDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) SDL_GL_GetProcAddress("glDeleteObjectARB"); - qglGetHandleARB = (PFNGLGETHANDLEARBPROC) SDL_GL_GetProcAddress("glGetHandleARB"); - qglDetachObjectARB = (PFNGLDETACHOBJECTARBPROC) SDL_GL_GetProcAddress("glDetachObjectARB"); - qglCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) SDL_GL_GetProcAddress("glCreateShaderObjectARB"); - qglShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) SDL_GL_GetProcAddress("glShaderSourceARB"); - qglCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) SDL_GL_GetProcAddress("glCompileShaderARB"); - qglCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glCreateProgramObjectARB"); - qglAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) SDL_GL_GetProcAddress("glAttachObjectARB"); - qglLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) SDL_GL_GetProcAddress("glLinkProgramARB"); - qglUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glUseProgramObjectARB"); - qglValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC) SDL_GL_GetProcAddress("glValidateProgramARB"); - qglUniform1fARB = (PFNGLUNIFORM1FARBPROC) SDL_GL_GetProcAddress("glUniform1fARB"); - qglUniform2fARB = (PFNGLUNIFORM2FARBPROC) SDL_GL_GetProcAddress("glUniform2fARB"); - qglUniform3fARB = (PFNGLUNIFORM3FARBPROC) SDL_GL_GetProcAddress("glUniform3fARB"); - qglUniform4fARB = (PFNGLUNIFORM4FARBPROC) SDL_GL_GetProcAddress("glUniform4fARB"); - qglUniform1iARB = (PFNGLUNIFORM1IARBPROC) SDL_GL_GetProcAddress("glUniform1iARB"); - qglUniform2iARB = (PFNGLUNIFORM2IARBPROC) SDL_GL_GetProcAddress("glUniform2iARB"); - qglUniform3iARB = (PFNGLUNIFORM3IARBPROC) SDL_GL_GetProcAddress("glUniform3iARB"); - qglUniform4iARB = (PFNGLUNIFORM4IARBPROC) SDL_GL_GetProcAddress("glUniform4iARB"); - qglUniform1fvARB = (PFNGLUNIFORM1FVARBPROC) SDL_GL_GetProcAddress("glUniform1fvARB"); - qglUniform2fvARB = (PFNGLUNIFORM2FVARBPROC) SDL_GL_GetProcAddress("glUniform2fvARB"); - qglUniform3fvARB = (PFNGLUNIFORM3FVARBPROC) SDL_GL_GetProcAddress("glUniform3fvARB"); - qglUniform4fvARB = (PFNGLUNIFORM4FVARBPROC) SDL_GL_GetProcAddress("glUniform4fvARB"); - qglUniform2ivARB = (PFNGLUNIFORM2IVARBPROC) SDL_GL_GetProcAddress("glUniform2ivARB"); - qglUniform3ivARB = (PFNGLUNIFORM3IVARBPROC) SDL_GL_GetProcAddress("glUniform3ivARB"); - qglUniform4ivARB = (PFNGLUNIFORM4IVARBPROC) SDL_GL_GetProcAddress("glUniform4ivARB"); - qglUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC) SDL_GL_GetProcAddress("glUniformMatrix2fvARB"); - qglUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC) SDL_GL_GetProcAddress("glUniformMatrix3fvARB"); - qglUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC) SDL_GL_GetProcAddress("glUniformMatrix4fvARB"); - qglGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC) SDL_GL_GetProcAddress("glGetObjectParameterfvARB"); - qglGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) SDL_GL_GetProcAddress("glGetObjectParameterivARB"); - qglGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) SDL_GL_GetProcAddress("glGetInfoLogARB"); - qglGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC) SDL_GL_GetProcAddress("glGetAttachedObjectsARB"); - qglGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) SDL_GL_GetProcAddress("glGetUniformLocationARB"); - qglGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC) SDL_GL_GetProcAddress("glGetActiveUniformARB"); - qglGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC) SDL_GL_GetProcAddress("glGetUniformfvARB"); - qglGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC) SDL_GL_GetProcAddress("glGetUniformivARB"); - qglGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC) SDL_GL_GetProcAddress("glGetShaderSourceARB"); - ri.Printf(PRINT_ALL, result[1], extension); - //glRefConfig.shaderObjects = qtrue; - } - else - { - ri.Error(ERR_FATAL, result[2], extension); - } - - // GL_ARB_vertex_shader - //glRefConfig.vertexShader = qfalse; - extension = "GL_ARB_vertex_shader"; - qglBindAttribLocationARB = NULL; - qglGetActiveAttribARB = NULL; - qglGetAttribLocationARB = NULL; - if( GLimp_HaveExtension( extension ) ) - { - //int reservedComponents; - - //qglGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &glConfig.maxVertexUniforms); - //qglGetIntegerv(GL_MAX_VARYING_FLOATS_ARB, &glConfig.maxVaryingFloats); - //qglGetIntegerv(GL_MAX_VERTEX_ATTRIBS_ARB, &glConfig.maxVertexAttribs); - - //reservedComponents = 16 * 10; // approximation how many uniforms we have besides the bone matrices - -#if 0 - if(glConfig.driverType == GLDRV_MESA) - { - // HACK - // restrict to number of vertex uniforms to 512 because of: - // xreal.x86_64: nv50_program.c:4181: nv50_program_validate_data: Assertion `p->param_nr <= 512' failed - - glConfig.maxVertexUniforms = Q_bound(0, glConfig.maxVertexUniforms, 512); - } -#endif - - //glConfig.maxVertexSkinningBones = (int) Q_bound(0.0, (Q_max(glConfig.maxVertexUniforms - reservedComponents, 0) / 16), MAX_BONES); - //glConfig.vboVertexSkinningAvailable = r_vboVertexSkinning->integer && ((glConfig.maxVertexSkinningBones >= 12) ? qtrue : qfalse); - - qglBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC) SDL_GL_GetProcAddress("glBindAttribLocationARB"); - qglGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC) SDL_GL_GetProcAddress("glGetActiveAttribARB"); - qglGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC) SDL_GL_GetProcAddress("glGetAttribLocationARB"); - ri.Printf(PRINT_ALL, result[1], extension); - //glRefConfig.vertexShader = qtrue; - } - else - { - ri.Error(ERR_FATAL, result[2], extension); - } - - // GL_ARB_shading_language_100 - extension = "GL_ARB_shading_language_100"; - if( GLimp_HaveExtension( extension ) ) + if (1) { char version[256]; - Q_strncpyz( version, (char *) qglGetString (GL_SHADING_LANGUAGE_VERSION_ARB), sizeof( version ) ); + Q_strncpyz(version, (char *)qglGetString(GL_SHADING_LANGUAGE_VERSION), sizeof(version)); sscanf(version, "%d.%d", &glRefConfig.glslMajorVersion, &glRefConfig.glslMinorVersion); ri.Printf(PRINT_ALL, "...using GLSL version %s\n", version); } - else - { - ri.Error(ERR_FATAL, result[2], extension); - } glRefConfig.memInfo = MI_NONE; @@ -591,27 +371,6 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } - // GL_ARB_occlusion_query - extension = "GL_ARB_occlusion_query"; - glRefConfig.occlusionQuery = qfalse; - if (GLimp_HaveExtension(extension)) - { - qglGenQueriesARB = (PFNGLGENQUERIESARBPROC) SDL_GL_GetProcAddress("glGenQueriesARB"); - qglDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC) SDL_GL_GetProcAddress("glDeleteQueriesARB"); - qglIsQueryARB = (PFNGLISQUERYARBPROC) SDL_GL_GetProcAddress("glIsQueryARB"); - qglBeginQueryARB = (PFNGLBEGINQUERYARBPROC) SDL_GL_GetProcAddress("glBeginQueryARB"); - qglEndQueryARB = (PFNGLENDQUERYARBPROC) SDL_GL_GetProcAddress("glEndQueryARB"); - qglGetQueryivARB = (PFNGLGETQUERYIVARBPROC) SDL_GL_GetProcAddress("glGetQueryivARB"); - qglGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC) SDL_GL_GetProcAddress("glGetQueryObjectivARB"); - qglGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC) SDL_GL_GetProcAddress("glGetQueryObjectuivARB"); - glRefConfig.occlusionQuery = qtrue; - ri.Printf(PRINT_ALL, result[glRefConfig.occlusionQuery], extension); - } - else - { - ri.Printf(PRINT_ALL, result[2], extension); - } - // GL_EXT_framebuffer_blit extension = "GL_EXT_framebuffer_blit"; glRefConfig.framebufferBlit = qfalse; @@ -626,22 +385,6 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } - // GL_ARB_texture_compression - extension = "GL_ARB_texture_compression"; - glRefConfig.arbTextureCompression = qfalse; - if (GLimp_HaveExtension(extension)) - { - qglCompressedTexImage3DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage3DARB"); - qglCompressedTexImage2DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage2DARB"); - qglCompressedTexImage1DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexImage1DARB"); - qglCompressedTexSubImage3DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage3DARB"); - qglCompressedTexSubImage2DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage2DARB"); - qglCompressedTexSubImage1DARB = (void *)SDL_GL_GetProcAddress("glCompressedTexSubImage1DARB"); - qglGetCompressedTexImageARB = (void *)SDL_GL_GetProcAddress("glGetCompressedTexImageARB"); - glRefConfig.arbTextureCompression = qtrue; - ri.Printf(PRINT_ALL, result[glRefConfig.arbTextureCompression], extension); - } - // GL_EXT_framebuffer_multisample extension = "GL_EXT_framebuffer_multisample"; glRefConfig.framebufferMultisample = qfalse; @@ -662,7 +405,7 @@ void GLimp_InitExtraExtensions() extension = "GL_ARB_texture_compression_rgtc"; if (GLimp_HaveExtension(extension)) { - if (r_ext_compressed_textures->integer && glRefConfig.arbTextureCompression) + if (r_ext_compressed_textures->integer) glRefConfig.textureCompression |= TCR_RGTC; ri.Printf(PRINT_ALL, result[r_ext_compressed_textures->integer ? 1 : 0], extension); diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index 8c40573e..b9089612 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -149,7 +149,7 @@ static uniformInfo_t uniformsInfo[] = }; -static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly) +static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly) { char *msg; static char msgPart[1024]; @@ -157,7 +157,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly) int i; int printLevel = developerOnly ? PRINT_DEVELOPER : PRINT_ALL; - qglGetObjectParameterivARB(object, GL_OBJECT_INFO_LOG_LENGTH_ARB, &maxLength); + qglGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength); if (maxLength <= 0) { @@ -169,7 +169,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly) if (maxLength < 1023) { - qglGetInfoLogARB(object, maxLength, &maxLength, msgPart); + qglGetProgramInfoLog(program, maxLength, &maxLength, msgPart); msgPart[maxLength + 1] = '\0'; @@ -179,7 +179,7 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly) { msg = ri.Malloc(maxLength); - qglGetInfoLogARB(object, maxLength, &maxLength, msg); + qglGetProgramInfoLog(program, maxLength, &maxLength, msg); for(i = 0; i < maxLength; i += 1024) { @@ -192,18 +192,18 @@ static void GLSL_PrintInfoLog(GLhandleARB object, qboolean developerOnly) } } -static void GLSL_PrintShaderSource(GLhandleARB object) +static void GLSL_PrintShaderSource(GLuint shader) { char *msg; static char msgPart[1024]; int maxLength = 0; int i; - qglGetObjectParameterivARB(object, GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, &maxLength); + qglGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &maxLength); msg = ri.Malloc(maxLength); - qglGetShaderSourceARB(object, maxLength, &maxLength, msg); + qglShaderSource(shader, 1, (const GLchar **)&msg, &maxLength); for(i = 0; i < maxLength; i += 1024) { @@ -214,7 +214,7 @@ static void GLSL_PrintShaderSource(GLhandleARB object) ri.Free(msg); } -static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, char *dest, int size ) +static void GLSL_GetShaderHeader( GLenum shaderType, const GLchar *extra, char *dest, int size ) { float fbufWidthScale, fbufHeightScale; @@ -225,7 +225,7 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha { Q_strcat(dest, size, "#version 130\n"); - if(shaderType == GL_VERTEX_SHADER_ARB) + if(shaderType == GL_VERTEX_SHADER) { Q_strcat(dest, size, "#define attribute in\n"); Q_strcat(dest, size, "#define varying out\n"); @@ -349,20 +349,20 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha Q_strcat(dest, size, "#line 0\n"); } -static int GLSL_CompileGPUShader(GLhandleARB program, GLhandleARB *prevShader, const GLcharARB *buffer, int size, GLenum shaderType) +static int GLSL_CompileGPUShader(GLuint program, GLuint *prevShader, const GLchar *buffer, int size, GLenum shaderType) { GLint compiled; - GLhandleARB shader; + GLuint shader; - shader = qglCreateShaderObjectARB(shaderType); + shader = qglCreateShader(shaderType); - qglShaderSourceARB(shader, 1, (const GLcharARB **)&buffer, &size); + qglShaderSource(shader, 1, (const GLchar **)&buffer, &size); // compile shader - qglCompileShaderARB(shader); + qglCompileShader(shader); // check if shader compiled - qglGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &compiled); + qglGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); if(!compiled) { GLSL_PrintShaderSource(shader); @@ -376,12 +376,12 @@ static int GLSL_CompileGPUShader(GLhandleARB program, GLhandleARB *prevShader, c if (*prevShader) { - qglDetachObjectARB(program, *prevShader); - qglDeleteObjectARB(*prevShader); + qglDetachShader(program, *prevShader); + qglDeleteShader(*prevShader); } // attach shader to program - qglAttachObjectARB(program, shader); + qglAttachShader(program, shader); *prevShader = shader; @@ -392,12 +392,12 @@ static int GLSL_LoadGPUShaderText(const char *name, const char *fallback, GLenum shaderType, char *dest, int destSize) { char filename[MAX_QPATH]; - GLcharARB *buffer = NULL; - const GLcharARB *shaderText = NULL; + GLchar *buffer = NULL; + const GLchar *shaderText = NULL; int size; int result; - if(shaderType == GL_VERTEX_SHADER_ARB) + if(shaderType == GL_VERTEX_SHADER) { Com_sprintf(filename, sizeof(filename), "glsl/%s_vp.glsl", name); } @@ -451,13 +451,13 @@ static int GLSL_LoadGPUShaderText(const char *name, const char *fallback, return result; } -static void GLSL_LinkProgram(GLhandleARB program) +static void GLSL_LinkProgram(GLuint program) { GLint linked; - qglLinkProgramARB(program); + qglLinkProgram(program); - qglGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &linked); + qglGetProgramiv(program, GL_LINK_STATUS, &linked); if(!linked) { GLSL_PrintInfoLog(program, qfalse); @@ -466,13 +466,13 @@ static void GLSL_LinkProgram(GLhandleARB program) } } -static void GLSL_ValidateProgram(GLhandleARB program) +static void GLSL_ValidateProgram(GLuint program) { GLint validated; - qglValidateProgramARB(program); + qglValidateProgram(program); - qglGetObjectParameterivARB(program, GL_OBJECT_VALIDATE_STATUS_ARB, &validated); + qglGetProgramiv(program, GL_VALIDATE_STATUS, &validated); if(!validated) { GLSL_PrintInfoLog(program, qfalse); @@ -481,19 +481,19 @@ static void GLSL_ValidateProgram(GLhandleARB program) } } -static void GLSL_ShowProgramUniforms(GLhandleARB program) +static void GLSL_ShowProgramUniforms(GLuint program) { int i, count, size; GLenum type; char uniformName[1000]; // query the number of active uniforms - qglGetObjectParameterivARB(program, GL_OBJECT_ACTIVE_UNIFORMS_ARB, &count); + qglGetProgramiv(program, GL_ACTIVE_UNIFORMS, &count); // Loop over each of the active uniforms, and set their value for(i = 0; i < count; i++) { - qglGetActiveUniformARB(program, i, sizeof(uniformName), NULL, &size, &type, uniformName); + qglGetActiveUniform(program, i, sizeof(uniformName), NULL, &size, &type, uniformName); ri.Printf(PRINT_DEVELOPER, "active uniform: '%s'\n", uniformName); } @@ -510,64 +510,64 @@ static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int Q_strncpyz(program->name, name, sizeof(program->name)); - program->program = qglCreateProgramObjectARB(); + program->program = qglCreateProgram(); program->attribs = attribs; - if (!(GLSL_CompileGPUShader(program->program, &program->vertexShader, vpCode, strlen(vpCode), GL_VERTEX_SHADER_ARB))) + if (!(GLSL_CompileGPUShader(program->program, &program->vertexShader, vpCode, strlen(vpCode), GL_VERTEX_SHADER))) { - ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_VERTEX_SHADER_ARB\n", name); - qglDeleteObjectARB(program->program); + ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_VERTEX_SHADER\n", name); + qglDeleteProgram(program->program); return 0; } if(fpCode) { - if(!(GLSL_CompileGPUShader(program->program, &program->fragmentShader, fpCode, strlen(fpCode), GL_FRAGMENT_SHADER_ARB))) + if(!(GLSL_CompileGPUShader(program->program, &program->fragmentShader, fpCode, strlen(fpCode), GL_FRAGMENT_SHADER))) { - ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_FRAGMENT_SHADER_ARB\n", name); - qglDeleteObjectARB(program->program); + ri.Printf(PRINT_ALL, "GLSL_InitGPUShader2: Unable to load \"%s\" as GL_FRAGMENT_SHADER\n", name); + qglDeleteProgram(program->program); return 0; } } if(attribs & ATTR_POSITION) - qglBindAttribLocationARB(program->program, ATTR_INDEX_POSITION, "attr_Position"); + qglBindAttribLocation(program->program, ATTR_INDEX_POSITION, "attr_Position"); if(attribs & ATTR_TEXCOORD) - qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD, "attr_TexCoord0"); + qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD, "attr_TexCoord0"); if(attribs & ATTR_LIGHTCOORD) - qglBindAttribLocationARB(program->program, ATTR_INDEX_LIGHTCOORD, "attr_TexCoord1"); + qglBindAttribLocation(program->program, ATTR_INDEX_LIGHTCOORD, "attr_TexCoord1"); // if(attribs & ATTR_TEXCOORD2) -// qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD2, "attr_TexCoord2"); +// qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD2, "attr_TexCoord2"); // if(attribs & ATTR_TEXCOORD3) -// qglBindAttribLocationARB(program->program, ATTR_INDEX_TEXCOORD3, "attr_TexCoord3"); +// qglBindAttribLocation(program->program, ATTR_INDEX_TEXCOORD3, "attr_TexCoord3"); if(attribs & ATTR_TANGENT) - qglBindAttribLocationARB(program->program, ATTR_INDEX_TANGENT, "attr_Tangent"); + qglBindAttribLocation(program->program, ATTR_INDEX_TANGENT, "attr_Tangent"); if(attribs & ATTR_NORMAL) - qglBindAttribLocationARB(program->program, ATTR_INDEX_NORMAL, "attr_Normal"); + qglBindAttribLocation(program->program, ATTR_INDEX_NORMAL, "attr_Normal"); if(attribs & ATTR_COLOR) - qglBindAttribLocationARB(program->program, ATTR_INDEX_COLOR, "attr_Color"); + qglBindAttribLocation(program->program, ATTR_INDEX_COLOR, "attr_Color"); if(attribs & ATTR_PAINTCOLOR) - qglBindAttribLocationARB(program->program, ATTR_INDEX_PAINTCOLOR, "attr_PaintColor"); + qglBindAttribLocation(program->program, ATTR_INDEX_PAINTCOLOR, "attr_PaintColor"); if(attribs & ATTR_LIGHTDIRECTION) - qglBindAttribLocationARB(program->program, ATTR_INDEX_LIGHTDIRECTION, "attr_LightDirection"); + qglBindAttribLocation(program->program, ATTR_INDEX_LIGHTDIRECTION, "attr_LightDirection"); if(attribs & ATTR_POSITION2) - qglBindAttribLocationARB(program->program, ATTR_INDEX_POSITION2, "attr_Position2"); + qglBindAttribLocation(program->program, ATTR_INDEX_POSITION2, "attr_Position2"); if(attribs & ATTR_NORMAL2) - qglBindAttribLocationARB(program->program, ATTR_INDEX_NORMAL2, "attr_Normal2"); + qglBindAttribLocation(program->program, ATTR_INDEX_NORMAL2, "attr_Normal2"); if(attribs & ATTR_TANGENT2) - qglBindAttribLocationARB(program->program, ATTR_INDEX_TANGENT2, "attr_Tangent2"); + qglBindAttribLocation(program->program, ATTR_INDEX_TANGENT2, "attr_Tangent2"); GLSL_LinkProgram(program->program); @@ -575,7 +575,7 @@ static int GLSL_InitGPUShader2(shaderProgram_t * program, const char *name, int } static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name, - int attribs, qboolean fragmentShader, const GLcharARB *extra, qboolean addHeader, + int attribs, qboolean fragmentShader, const GLchar *extra, qboolean addHeader, const char *fallback_vp, const char *fallback_fp) { char vpCode[32000]; @@ -587,7 +587,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name, size = sizeof(vpCode); if (addHeader) { - GLSL_GetShaderHeader(GL_VERTEX_SHADER_ARB, extra, vpCode, size); + GLSL_GetShaderHeader(GL_VERTEX_SHADER, extra, vpCode, size); postHeader = &vpCode[strlen(vpCode)]; size -= strlen(vpCode); } @@ -596,7 +596,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name, postHeader = &vpCode[0]; } - if (!GLSL_LoadGPUShaderText(name, fallback_vp, GL_VERTEX_SHADER_ARB, postHeader, size)) + if (!GLSL_LoadGPUShaderText(name, fallback_vp, GL_VERTEX_SHADER, postHeader, size)) { return 0; } @@ -606,7 +606,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name, size = sizeof(fpCode); if (addHeader) { - GLSL_GetShaderHeader(GL_FRAGMENT_SHADER_ARB, extra, fpCode, size); + GLSL_GetShaderHeader(GL_FRAGMENT_SHADER, extra, fpCode, size); postHeader = &fpCode[strlen(fpCode)]; size -= strlen(fpCode); } @@ -615,7 +615,7 @@ static int GLSL_InitGPUShader(shaderProgram_t * program, const char *name, postHeader = &fpCode[0]; } - if (!GLSL_LoadGPUShaderText(name, fallback_fp, GL_FRAGMENT_SHADER_ARB, postHeader, size)) + if (!GLSL_LoadGPUShaderText(name, fallback_fp, GL_FRAGMENT_SHADER, postHeader, size)) { return 0; } @@ -635,7 +635,7 @@ void GLSL_InitUniforms(shaderProgram_t *program) size = 0; for (i = 0; i < UNIFORM_COUNT; i++) { - uniforms[i] = qglGetUniformLocationARB(program->program, uniformsInfo[i].name); + uniforms[i] = qglGetUniformLocation(program->program, uniformsInfo[i].name); if (uniforms[i] == -1) continue; @@ -855,17 +855,17 @@ void GLSL_DeleteGPUShader(shaderProgram_t *program) { if (program->vertexShader) { - qglDetachObjectARB(program->program, program->vertexShader); - qglDeleteObjectARB(program->vertexShader); + qglDetachShader(program->program, program->vertexShader); + qglDeleteShader(program->vertexShader); } if (program->fragmentShader) { - qglDetachObjectARB(program->program, program->fragmentShader); - qglDeleteObjectARB(program->fragmentShader); + qglDetachShader(program->program, program->fragmentShader); + qglDeleteShader(program->fragmentShader); } - qglDeleteObjectARB(program->program); + qglDeleteProgram(program->program); if (program->uniformBuffer) { @@ -1360,7 +1360,7 @@ void GLSL_ShutdownGPUShaders(void) ri.Printf(PRINT_ALL, "------- GLSL_ShutdownGPUShaders -------\n"); for (i = 0; i < ATTR_INDEX_COUNT; i++) - qglDisableVertexAttribArrayARB(i); + qglDisableVertexAttribArray(i); GL_BindNullProgram(); @@ -1406,7 +1406,7 @@ void GLSL_BindProgram(shaderProgram_t * program) GLimp_LogComment(va("--- GLSL_BindProgram( %s ) ---\n", name)); } - if (GL_UseProgramObject(programObject)) + if (GL_UseProgram(programObject)) backEnd.pc.c_glslShaderBinds++; } diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 05cd40e7..73c1c55f 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -976,8 +976,8 @@ void GL_SetDefaultState( void ) if (glRefConfig.vertexArrayObject) qglBindVertexArrayARB(0); - qglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + qglBindBuffer(GL_ARRAY_BUFFER, 0); + qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glState.currentVao = NULL; glState.vertexAttribsEnabled = 0; @@ -1380,7 +1380,7 @@ void R_InitQueries(void) return; if (r_drawSunRays->integer) - qglGenQueriesARB(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery); + qglGenQueries(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery); } void R_ShutDownQueries(void) @@ -1389,7 +1389,7 @@ void R_ShutDownQueries(void) return; if (r_drawSunRays->integer) - qglDeleteQueriesARB(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery); + qglDeleteQueries(ARRAY_LEN(tr.sunFlareQuery), tr.sunFlareQuery); } /* diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index b50692e5..202e1af9 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -706,9 +706,9 @@ typedef struct shaderProgram_s { char name[MAX_QPATH]; - GLhandleARB program; - GLhandleARB vertexShader; - GLhandleARB fragmentShader; + GLuint program; + GLuint vertexShader; + GLuint fragmentShader; uint32_t attribs; // vertex array attributes // uniform parameters @@ -1383,6 +1383,9 @@ typedef enum { // We can't change glConfig_t without breaking DLL/vms compatibility, so // store extensions we have here. typedef struct { + int openglMajorVersion; + int openglMinorVersion; + qboolean drawRangeElements; qboolean multiDrawArrays; qboolean occlusionQuery; @@ -1400,7 +1403,6 @@ typedef struct { qboolean textureFloat; qboolean halfFloatPixel; qboolean packedDepthStencil; - qboolean arbTextureCompression; textureCompressionRef_t textureCompression; qboolean swizzleNormalmap; diff --git a/code/renderergl2/tr_postprocess.c b/code/renderergl2/tr_postprocess.c index c4e51554..ade9ebf3 100644 --- a/code/renderergl2/tr_postprocess.c +++ b/code/renderergl2/tr_postprocess.c @@ -282,7 +282,7 @@ static qboolean RB_UpdateSunFlareVis(void) for (iter=0 ; ; ++iter) { GLint available = 0; - qglGetQueryObjectivARB(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT_AVAILABLE_ARB, &available); + qglGetQueryObjectiv(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT_AVAILABLE, &available); if (available) break; } @@ -290,7 +290,7 @@ static qboolean RB_UpdateSunFlareVis(void) ri.Printf(PRINT_DEVELOPER, "Waited %d iterations\n", iter); } - qglGetQueryObjectuivARB(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT_ARB, &sampleCount); + qglGetQueryObjectuiv(tr.sunFlareQuery[tr.sunFlareQueryIndex], GL_QUERY_RESULT, &sampleCount); return sampleCount > 0; } diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index eb8688e9..356f2135 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -44,7 +44,7 @@ R_DrawElements void R_DrawElementsVao( int numIndexes, glIndex_t firstIndex, glIndex_t minIndex, glIndex_t maxIndex ) { if (glRefConfig.drawRangeElements) - qglDrawRangeElementsEXT(GL_TRIANGLES, minIndex, maxIndex, numIndexes, GL_INDEX_TYPE, BUFFER_OFFSET(firstIndex * sizeof(glIndex_t))); + qglDrawRangeElements(GL_TRIANGLES, minIndex, maxIndex, numIndexes, GL_INDEX_TYPE, BUFFER_OFFSET(firstIndex * sizeof(glIndex_t))); else qglDrawElements(GL_TRIANGLES, numIndexes, GL_INDEX_TYPE, BUFFER_OFFSET(firstIndex * sizeof(glIndex_t))); @@ -56,7 +56,7 @@ static void R_DrawMultiElementsVao( int multiDrawPrimitives, glIndex_t *multiDra { if (glRefConfig.multiDrawArrays && multiDrawPrimitives > 1) { - qglMultiDrawElementsEXT(GL_TRIANGLES, multiDrawNumIndexes, GL_INDEX_TYPE, (const GLvoid **)multiDrawFirstIndex, multiDrawPrimitives); + qglMultiDrawElements(GL_TRIANGLES, multiDrawNumIndexes, GL_INDEX_TYPE, (const GLvoid **)multiDrawFirstIndex, multiDrawPrimitives); } else { @@ -66,7 +66,7 @@ static void R_DrawMultiElementsVao( int multiDrawPrimitives, glIndex_t *multiDra { for (i = 0; i < multiDrawPrimitives; i++) { - qglDrawRangeElementsEXT(GL_TRIANGLES, multiDrawMinIndex[i], multiDrawMaxIndex[i], multiDrawNumIndexes[i], GL_INDEX_TYPE, multiDrawFirstIndex[i]); + qglDrawRangeElements(GL_TRIANGLES, multiDrawMinIndex[i], multiDrawMaxIndex[i], multiDrawNumIndexes[i], GL_INDEX_TYPE, multiDrawFirstIndex[i]); } } else diff --git a/code/renderergl2/tr_surface.c b/code/renderergl2/tr_surface.c index f43ea6f4..edaf43d8 100644 --- a/code/renderergl2/tr_surface.c +++ b/code/renderergl2/tr_surface.c @@ -1624,43 +1624,43 @@ void RB_SurfaceVaoMdvMesh(srfVaoMdvMesh_t * surface) if (glRefConfig.vertexArrayObject) { - qglBindBufferARB(GL_ARRAY_BUFFER_ARB, surface->vao->vertexesVBO); + qglBindBuffer(GL_ARRAY_BUFFER, surface->vao->vertexesVBO); } frameOffset = refEnt->frame * surface->vao->frameSize; attribIndex = ATTR_INDEX_POSITION; vAtb = &surface->vao->attribs[attribIndex]; - qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); + qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); attribIndex = ATTR_INDEX_NORMAL; vAtb = &surface->vao->attribs[attribIndex]; - qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); + qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); attribIndex = ATTR_INDEX_TANGENT; vAtb = &surface->vao->attribs[attribIndex]; - qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); + qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); frameOffset = refEnt->oldframe * surface->vao->frameSize; attribIndex = ATTR_INDEX_POSITION2; vAtb = &surface->vao->attribs[attribIndex]; - qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); + qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); attribIndex = ATTR_INDEX_NORMAL2; vAtb = &surface->vao->attribs[attribIndex]; - qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); + qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); attribIndex = ATTR_INDEX_TANGENT2; vAtb = &surface->vao->attribs[attribIndex]; - qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); + qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset + frameOffset)); if (!glRefConfig.vertexArrayObject) { attribIndex = ATTR_INDEX_TEXCOORD; vAtb = &surface->vao->attribs[attribIndex]; - qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset)); + qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset)); } } diff --git a/code/renderergl2/tr_vbo.c b/code/renderergl2/tr_vbo.c index 8f9ba66f..61ede4e1 100644 --- a/code/renderergl2/tr_vbo.c +++ b/code/renderergl2/tr_vbo.c @@ -196,9 +196,9 @@ void Vao_SetVertexPointers(vao_t *vao) if (vAtb->enabled) { - qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset)); + qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset)); if (glRefConfig.vertexArrayObject || !(glState.vertexAttribsEnabled & attribBit)) - qglEnableVertexAttribArrayARB(attribIndex); + qglEnableVertexAttribArray(attribIndex); if (!glRefConfig.vertexArrayObject || vao == tess.vao) glState.vertexAttribsEnabled |= attribBit; @@ -208,7 +208,7 @@ void Vao_SetVertexPointers(vao_t *vao) // don't disable vertex attribs when using vertex array objects // Vao_SetVertexPointers is only called during init when using VAOs, and vertex attribs start disabled anyway if (!glRefConfig.vertexArrayObject && (glState.vertexAttribsEnabled & attribBit)) - qglDisableVertexAttribArrayARB(attribIndex); + qglDisableVertexAttribArray(attribIndex); if (!glRefConfig.vertexArrayObject || vao == tess.vao) glState.vertexAttribsEnabled &= ~attribBit; @@ -229,11 +229,11 @@ vao_t *R_CreateVao(const char *name, byte *vertexes, int vertexesSize, byte *ind switch (usage) { case VAO_USAGE_STATIC: - glUsage = GL_STATIC_DRAW_ARB; + glUsage = GL_STATIC_DRAW; break; case VAO_USAGE_DYNAMIC: - glUsage = GL_DYNAMIC_DRAW_ARB; + glUsage = GL_DYNAMIC_DRAW; break; default: @@ -269,18 +269,18 @@ vao_t *R_CreateVao(const char *name, byte *vertexes, int vertexesSize, byte *ind vao->vertexesSize = vertexesSize; - qglGenBuffersARB(1, &vao->vertexesVBO); + qglGenBuffers(1, &vao->vertexesVBO); - qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO); - qglBufferDataARB(GL_ARRAY_BUFFER_ARB, vertexesSize, vertexes, glUsage); + qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO); + qglBufferData(GL_ARRAY_BUFFER, vertexesSize, vertexes, glUsage); vao->indexesSize = indexesSize; - qglGenBuffersARB(1, &vao->indexesIBO); + qglGenBuffers(1, &vao->indexesIBO); - qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesIBO); - qglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexesSize, indexes, glUsage); + qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO); + qglBufferData(GL_ELEMENT_ARRAY_BUFFER, indexesSize, indexes, glUsage); glState.currentVao = vao; @@ -304,7 +304,7 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num int dataSize; int dataOfs; - int glUsage = GL_STATIC_DRAW_ARB; + int glUsage = GL_STATIC_DRAW; if(!numVertexes || !numIndexes) return NULL; @@ -422,19 +422,19 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num vao->vertexesSize = dataSize; - qglGenBuffersARB(1, &vao->vertexesVBO); + qglGenBuffers(1, &vao->vertexesVBO); - qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO); - qglBufferDataARB(GL_ARRAY_BUFFER_ARB, vao->vertexesSize, data, glUsage); + qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO); + qglBufferData(GL_ARRAY_BUFFER, vao->vertexesSize, data, glUsage); // create IBO vao->indexesSize = numIndexes * sizeof(glIndex_t); - qglGenBuffersARB(1, &vao->indexesIBO); + qglGenBuffers(1, &vao->indexesIBO); - qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesIBO); - qglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesSize, indexes, glUsage); + qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO); + qglBufferData(GL_ELEMENT_ARRAY_BUFFER, vao->indexesSize, indexes, glUsage); Vao_SetVertexPointers(vao); @@ -484,16 +484,16 @@ void R_BindVao(vao_t * vao) // why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel? if (1) - qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO); + qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO); // tess VAO always has buffers bound if (vao == tess.vao) - qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO); + qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO); } else { - qglBindBufferARB(GL_ARRAY_BUFFER_ARB, vao->vertexesVBO); - qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, vao->indexesIBO); + qglBindBuffer(GL_ARRAY_BUFFER, vao->vertexesVBO); + qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vao->indexesIBO); // tess VAO doesn't have vertex pointers set until data is uploaded if (vao != tess.vao) @@ -518,12 +518,12 @@ void R_BindNullVao(void) qglBindVertexArrayARB(0); // why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel? - if (1) qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + if (1) qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } else { - qglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); - qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0); + qglBindBuffer(GL_ARRAY_BUFFER, 0); + qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } glState.currentVao = NULL; } @@ -658,12 +658,12 @@ void R_ShutdownVaos(void) if(vao->vertexesVBO) { - qglDeleteBuffersARB(1, &vao->vertexesVBO); + qglDeleteBuffers(1, &vao->vertexesVBO); } if(vao->indexesIBO) { - qglDeleteBuffersARB(1, &vao->indexesIBO); + qglDeleteBuffers(1, &vao->indexesIBO); } } @@ -737,7 +737,7 @@ void RB_UpdateTessVao(unsigned int attribBits) R_BindVao(tess.vao); // orphan old vertex buffer so we don't stall on it - qglBufferDataARB(GL_ARRAY_BUFFER_ARB, tess.vao->vertexesSize, NULL, GL_DYNAMIC_DRAW_ARB); + qglBufferData(GL_ARRAY_BUFFER, tess.vao->vertexesSize, NULL, GL_DYNAMIC_DRAW); // if nothing to set, set everything if(!(attribBits & ATTR_BITS)) @@ -761,17 +761,17 @@ void RB_UpdateTessVao(unsigned int attribBits) if (attribUpload & attribBit) { // note: tess has a VBO where stride == size - qglBufferSubDataARB(GL_ARRAY_BUFFER_ARB, vAtb->offset, tess.numVertexes * vAtb->stride, tess.attribPointers[attribIndex]); + qglBufferSubData(GL_ARRAY_BUFFER, vAtb->offset, tess.numVertexes * vAtb->stride, tess.attribPointers[attribIndex]); } if (attribBits & attribBit) { if (!glRefConfig.vertexArrayObject) - qglVertexAttribPointerARB(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset)); + qglVertexAttribPointer(attribIndex, vAtb->count, vAtb->type, vAtb->normalized, vAtb->stride, BUFFER_OFFSET(vAtb->offset)); if (!(glState.vertexAttribsEnabled & attribBit)) { - qglEnableVertexAttribArrayARB(attribIndex); + qglEnableVertexAttribArray(attribIndex); glState.vertexAttribsEnabled |= attribBit; } } @@ -779,15 +779,15 @@ void RB_UpdateTessVao(unsigned int attribBits) { if ((glState.vertexAttribsEnabled & attribBit)) { - qglDisableVertexAttribArrayARB(attribIndex); + qglDisableVertexAttribArray(attribIndex); glState.vertexAttribsEnabled &= ~attribBit; } } } // orphan old index buffer so we don't stall on it - qglBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, tess.vao->indexesSize, NULL, GL_DYNAMIC_DRAW_ARB); + qglBufferData(GL_ELEMENT_ARRAY_BUFFER, tess.vao->indexesSize, NULL, GL_DYNAMIC_DRAW); - qglBufferSubDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0, tess.numIndexes * sizeof(tess.indexes[0]), tess.indexes); + qglBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, tess.numIndexes * sizeof(tess.indexes[0]), tess.indexes); } } From f0086e8c2abdd08102a399f0c68eb1dd82d67c9b Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 25 Jul 2016 06:30:25 -0700 Subject: [PATCH 139/480] OpenGL2: Add new GL function loader. --- code/renderercommon/qgl.h | 103 +++++++++++++++------------ code/renderergl2/tr_extensions.c | 115 +++++-------------------------- 2 files changed, 77 insertions(+), 141 deletions(-) diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h index 9c514a99..6f27e130 100644 --- a/code/renderercommon/qgl.h +++ b/code/renderercommon/qgl.h @@ -377,59 +377,74 @@ extern void (APIENTRYP qglUnlockArraysEXT) (void); #define qglVertexPointer glVertexPointer #define qglViewport glViewport +// GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a + // OpenGL 1.2, was GL_EXT_draw_range_elements -extern void (APIENTRY * qglDrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +#define QGL_1_2_PROCS \ + GLE(void, DrawRangeElements, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) \ // OpenGL 1.3, was GL_ARB_texture_compression -extern void (APIENTRY * qglCompressedTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -extern void (APIENTRY * qglCompressedTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +#define QGL_1_3_PROCS \ + GLE(void, CompressedTexImage2D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data) \ + GLE(void, CompressedTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data) \ // OpenGL 1.4, was GL_EXT_multi_draw_arrays -extern void (APIENTRY * qglMultiDrawElements) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); +#define QGL_1_4_PROCS \ + GLE(void, MultiDrawElements, GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount) \ // OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query -extern void (APIENTRY * qglGenQueries) (GLsizei n, GLuint *ids); -extern void (APIENTRY * qglDeleteQueries) (GLsizei n, const GLuint *ids); -extern void (APIENTRY * qglBeginQuery) (GLenum target, GLuint id); -extern void (APIENTRY * qglEndQuery) (GLenum target); -extern void (APIENTRY * qglGetQueryObjectiv) (GLuint id, GLenum pname, GLint *params); -extern void (APIENTRY * qglGetQueryObjectuiv) (GLuint id, GLenum pname, GLuint *params); -extern void (APIENTRY * qglBindBuffer) (GLenum target, GLuint buffer); -extern void (APIENTRY * qglDeleteBuffers) (GLsizei n, const GLuint *buffers); -extern void (APIENTRY * qglGenBuffers) (GLsizei n, GLuint *buffers); -extern void (APIENTRY * qglBufferData) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -extern void (APIENTRY * qglBufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +#define QGL_1_5_PROCS \ + GLE(void, GenQueries, GLsizei n, GLuint *ids) \ + GLE(void, DeleteQueries, GLsizei n, const GLuint *ids) \ + GLE(void, BeginQuery, GLenum target, GLuint id) \ + GLE(void, EndQuery, GLenum target) \ + GLE(void, GetQueryObjectiv, GLuint id, GLenum pname, GLint *params) \ + GLE(void, GetQueryObjectuiv, GLuint id, GLenum pname, GLuint *params) \ + GLE(void, BindBuffer, GLenum target, GLuint buffer) \ + GLE(void, DeleteBuffers, GLsizei n, const GLuint *buffers) \ + GLE(void, GenBuffers, GLsizei n, GLuint *buffers) \ + GLE(void, BufferData, GLenum target, GLsizeiptr size, const void *data, GLenum usage) \ + GLE(void, BufferSubData, GLenum target, GLintptr offset, GLsizeiptr size, const void *data) \ // OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader -extern void (APIENTRY * qglAttachShader) (GLuint program, GLuint shader); -extern void (APIENTRY * qglBindAttribLocation) (GLuint program, GLuint index, const GLchar *name); -extern void (APIENTRY * qglCompileShader) (GLuint shader); -extern GLuint (APIENTRY * qglCreateProgram) (void); -extern GLuint (APIENTRY * qglCreateShader) (GLenum type); -extern void (APIENTRY * qglDeleteProgram) (GLuint program); -extern void (APIENTRY * qglDeleteShader) (GLuint shader); -extern void (APIENTRY * qglDetachShader) (GLuint program, GLuint shader); -extern void (APIENTRY * qglDisableVertexAttribArray) (GLuint index); -extern void (APIENTRY * qglEnableVertexAttribArray) (GLuint index); -extern void (APIENTRY * qglGetActiveUniform) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -extern void (APIENTRY * qglGetProgramiv) (GLuint program, GLenum pname, GLint *params); -extern void (APIENTRY * qglGetProgramInfoLog) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -extern void (APIENTRY * qglGetShaderiv) (GLuint shader, GLenum pname, GLint *params); -extern void (APIENTRY * qglGetShaderInfoLog) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -extern void (APIENTRY * qglGetShaderSource) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -extern GLint (APIENTRY * qglGetUniformLocation) (GLuint program, const GLchar *name); -extern void (APIENTRY * qglLinkProgram) (GLuint program); -extern void (APIENTRY * qglShaderSource) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -extern void (APIENTRY * qglUseProgram) (GLuint program); -extern void (APIENTRY * qglUniform1f) (GLint location, GLfloat v0); -extern void (APIENTRY * qglUniform2f) (GLint location, GLfloat v0, GLfloat v1); -extern void (APIENTRY * qglUniform3f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -extern void (APIENTRY * qglUniform4f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -extern void (APIENTRY * qglUniform1i) (GLint location, GLint v0); -extern void (APIENTRY * qglUniform1fv) (GLint location, GLsizei count, const GLfloat *value); -extern void (APIENTRY * qglUniformMatrix4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -extern void (APIENTRY * qglValidateProgram) (GLuint program); -extern void (APIENTRY * qglVertexAttribPointer) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#define QGL_2_0_PROCS \ + GLE(void, AttachShader, GLuint program, GLuint shader) \ + GLE(void, BindAttribLocation, GLuint program, GLuint index, const GLchar *name) \ + GLE(void, CompileShader, GLuint shader) \ + GLE(GLuint, CreateProgram, void) \ + GLE(GLuint, CreateShader, GLenum type) \ + GLE(void, DeleteProgram, GLuint program) \ + GLE(void, DeleteShader, GLuint shader) \ + GLE(void, DetachShader, GLuint program, GLuint shader) \ + GLE(void, DisableVertexAttribArray, GLuint index) \ + GLE(void, EnableVertexAttribArray, GLuint index) \ + GLE(void, GetActiveUniform, GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) \ + GLE(void, GetProgramiv, GLuint program, GLenum pname, GLint *params) \ + GLE(void, GetProgramInfoLog, GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog) \ + GLE(void, GetShaderiv, GLuint shader, GLenum pname, GLint *params) \ + GLE(void, GetShaderInfoLog, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog) \ + GLE(void, GetShaderSource, GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source) \ + GLE(GLint, GetUniformLocation, GLuint program, const GLchar *name) \ + GLE(void, LinkProgram, GLuint program) \ + GLE(void, ShaderSource, GLuint shader, GLsizei count, const GLchar* *string, const GLint *length) \ + GLE(void, UseProgram, GLuint program) \ + GLE(void, Uniform1f, GLint location, GLfloat v0) \ + GLE(void, Uniform2f, GLint location, GLfloat v0, GLfloat v1) \ + GLE(void, Uniform3f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \ + GLE(void, Uniform4f, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \ + GLE(void, Uniform1i, GLint location, GLint v0) \ + GLE(void, Uniform1fv, GLint location, GLsizei count, const GLfloat *value) \ + GLE(void, UniformMatrix4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \ + GLE(void, ValidateProgram, GLuint program) \ + GLE(void, VertexAttribPointer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer) \ + +#define GLE(ret, name, ...) typedef ret APIENTRY name##proc(__VA_ARGS__); extern name##proc * qgl##name; +QGL_1_2_PROCS +QGL_1_3_PROCS +QGL_1_4_PROCS +QGL_1_5_PROCS +QGL_2_0_PROCS +#undef GLE // GL_NVX_gpu_memory_info #ifndef GL_NVX_gpu_memory_info diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index d57ed6e7..e1500790 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -30,59 +30,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "tr_local.h" #include "tr_dsa.h" -// OpenGL 1.2, was GL_EXT_draw_range_elements -void (APIENTRY * qglDrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); - -// OpenGL 1.3, was GL_ARB_texture_compression -void (APIENTRY * qglCompressedTexImage2D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -void (APIENTRY * qglCompressedTexSubImage2D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); - -// OpenGL 1.4, was GL_EXT_multi_draw_arrays -void (APIENTRY * qglMultiDrawElements) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); - -// OpenGL 1.5, previously GL_ARB_vertex_buffer_object -void (APIENTRY * qglGenQueries) (GLsizei n, GLuint *ids); -void (APIENTRY * qglDeleteQueries) (GLsizei n, const GLuint *ids); -void (APIENTRY * qglBeginQuery) (GLenum target, GLuint id); -void (APIENTRY * qglEndQuery) (GLenum target); -void (APIENTRY * qglGetQueryObjectiv) (GLuint id, GLenum pname, GLint *params); -void (APIENTRY * qglGetQueryObjectuiv) (GLuint id, GLenum pname, GLuint *params); -void (APIENTRY * qglBindBuffer) (GLenum target, GLuint buffer); -void (APIENTRY * qglDeleteBuffers) (GLsizei n, const GLuint *buffers); -void (APIENTRY * qglGenBuffers) (GLsizei n, GLuint *buffers); -void (APIENTRY * qglBufferData) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); -void (APIENTRY * qglBufferSubData) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); - -// OpenGL 2.0, previously GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader -void (APIENTRY * qglAttachShader) (GLuint program, GLuint shader); -void (APIENTRY * qglBindAttribLocation) (GLuint program, GLuint index, const GLchar *name); -void (APIENTRY * qglCompileShader) (GLuint shader); -GLuint(APIENTRY * qglCreateProgram) (void); -GLuint(APIENTRY * qglCreateShader) (GLenum type); -void (APIENTRY * qglDeleteProgram) (GLuint program); -void (APIENTRY * qglDeleteShader) (GLuint shader); -void (APIENTRY * qglDetachShader) (GLuint program, GLuint shader); -void (APIENTRY * qglDisableVertexAttribArray) (GLuint index); -void (APIENTRY * qglEnableVertexAttribArray) (GLuint index); -void (APIENTRY * qglGetActiveUniform) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -void (APIENTRY * qglGetProgramiv) (GLuint program, GLenum pname, GLint *params); -void (APIENTRY * qglGetProgramInfoLog) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -void (APIENTRY * qglGetShaderiv) (GLuint shader, GLenum pname, GLint *params); -void (APIENTRY * qglGetShaderInfoLog) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -void (APIENTRY * qglGetShaderSource) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLint(APIENTRY * qglGetUniformLocation) (GLuint program, const GLchar *name); -void (APIENTRY * qglLinkProgram) (GLuint program); -void (APIENTRY * qglShaderSource) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -void (APIENTRY * qglUseProgram) (GLuint program); -void (APIENTRY * qglUniform1f) (GLint location, GLfloat v0); -void (APIENTRY * qglUniform2f) (GLint location, GLfloat v0, GLfloat v1); -void (APIENTRY * qglUniform3f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -void (APIENTRY * qglUniform4f) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -void (APIENTRY * qglUniform1i) (GLint location, GLint v0); -void (APIENTRY * qglUniform1fv) (GLint location, GLsizei count, const GLfloat *value); -void (APIENTRY * qglUniformMatrix4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -void (APIENTRY * qglValidateProgram) (GLuint program); -void (APIENTRY * qglVertexAttribPointer) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#define GLE(ret, name, ...) name##proc * qgl##name; +QGL_1_2_PROCS; +QGL_1_3_PROCS; +QGL_1_4_PROCS; +QGL_1_5_PROCS; +QGL_2_0_PROCS; +#undef GLE // GL_EXT_framebuffer_object GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer); @@ -193,64 +147,31 @@ void GLimp_InitExtraExtensions() ri.Error(ERR_FATAL, "OpenGL 2.0 required!"); ri.Printf(PRINT_ALL, "...using OpenGL %s\n", glConfig.version_string); + // GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a + +#define GLE(ret, name, ...) qgl##name = (name##proc *) SDL_GL_GetProcAddress("gl" #name); + // OpenGL 1.2, was GL_EXT_draw_range_elements - qglDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)SDL_GL_GetProcAddress("glDrawRangeElements"); + QGL_1_2_PROCS; glRefConfig.drawRangeElements = r_ext_draw_range_elements->integer ? qtrue : qfalse; ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glDrawRangeElements()"); // OpenGL 1.3, was GL_ARB_texture_compression - qglCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) SDL_GL_GetProcAddress("glCompressedTexImage2D"); - qglCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) SDL_GL_GetProcAddress("qglCompressedTexSubImage2D"); + QGL_1_3_PROCS; // OpenGL 1.4, was GL_EXT_multi_draw_arrays - qglMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)SDL_GL_GetProcAddress("glMultiDrawElements"); + QGL_1_4_PROCS; glRefConfig.drawRangeElements = r_ext_multi_draw_arrays->integer ? qtrue : qfalse; ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glMultiDrawElements()"); // OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query - qglGenQueries = (PFNGLGENQUERIESPROC) SDL_GL_GetProcAddress("glGenQueries"); - qglDeleteQueries = (PFNGLDELETEQUERIESPROC) SDL_GL_GetProcAddress("glDeleteQueries"); - qglBeginQuery = (PFNGLBEGINQUERYPROC) SDL_GL_GetProcAddress("glBeginQuery"); - qglEndQuery = (PFNGLENDQUERYPROC) SDL_GL_GetProcAddress("glEndQuery"); - qglGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC) SDL_GL_GetProcAddress("glGetQueryObjectiv"); - qglGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC) SDL_GL_GetProcAddress("glGetQueryObjectuiv"); - qglBindBuffer = (PFNGLBINDBUFFERPROC) SDL_GL_GetProcAddress("glBindBuffer"); - qglDeleteBuffers = (PFNGLDELETEBUFFERSPROC) SDL_GL_GetProcAddress("glDeleteBuffers"); - qglGenBuffers = (PFNGLGENBUFFERSPROC) SDL_GL_GetProcAddress("glGenBuffers"); - qglBufferData = (PFNGLBUFFERDATAPROC) SDL_GL_GetProcAddress("glBufferData"); - qglBufferSubData = (PFNGLBUFFERSUBDATAPROC) SDL_GL_GetProcAddress("glBufferSubData"); + QGL_1_5_PROCS; glRefConfig.occlusionQuery = qtrue; // OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader - qglAttachShader = (PFNGLATTACHSHADERPROC) SDL_GL_GetProcAddress("glAttachShader"); - qglBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC) SDL_GL_GetProcAddress("glBindAttribLocation"); - qglCompileShader = (PFNGLCOMPILESHADERPROC) SDL_GL_GetProcAddress("glCompileShader"); - qglCreateProgram = (PFNGLCREATEPROGRAMPROC) SDL_GL_GetProcAddress("glCreateProgram"); - qglCreateShader = (PFNGLCREATESHADERPROC) SDL_GL_GetProcAddress("glCreateShader"); - qglDeleteProgram = (PFNGLDELETEPROGRAMPROC) SDL_GL_GetProcAddress("glDeleteProgram"); - qglDeleteShader = (PFNGLDELETESHADERPROC) SDL_GL_GetProcAddress("glDeleteShader"); - qglDetachShader = (PFNGLDETACHSHADERPROC) SDL_GL_GetProcAddress("glDetachShader"); - qglDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC) SDL_GL_GetProcAddress("glDisableVertexAttribArray"); - qglEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC) SDL_GL_GetProcAddress("glEnableVertexAttribArray"); - qglGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) SDL_GL_GetProcAddress("glGetActiveUniform"); - qglGetProgramiv = (PFNGLGETPROGRAMIVPROC) SDL_GL_GetProcAddress("glGetProgramiv"); - qglGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) SDL_GL_GetProcAddress("glGetProgramInfoLog"); - qglGetShaderiv = (PFNGLGETSHADERIVPROC) SDL_GL_GetProcAddress("glGetShaderiv"); - qglGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) SDL_GL_GetProcAddress("glGetShaderInfoLog"); - qglGetShaderSource = (PFNGLGETSHADERSOURCEPROC) SDL_GL_GetProcAddress("glGetShaderSource"); - qglGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) SDL_GL_GetProcAddress("glGetUniformLocation"); - qglLinkProgram = (PFNGLLINKPROGRAMPROC) SDL_GL_GetProcAddress("glLinkProgram"); - qglShaderSource = (PFNGLSHADERSOURCEPROC) SDL_GL_GetProcAddress("glShaderSource"); - qglUseProgram = (PFNGLUSEPROGRAMPROC) SDL_GL_GetProcAddress("glUseProgram"); - qglUniform1f = (PFNGLUNIFORM1FPROC) SDL_GL_GetProcAddress("glUniform1f"); - qglUniform2f = (PFNGLUNIFORM2FPROC) SDL_GL_GetProcAddress("glUniform2f"); - qglUniform3f = (PFNGLUNIFORM3FPROC) SDL_GL_GetProcAddress("glUniform3f"); - qglUniform4f = (PFNGLUNIFORM4FPROC) SDL_GL_GetProcAddress("glUniform4f"); - qglUniform1i = (PFNGLUNIFORM1IPROC) SDL_GL_GetProcAddress("glUniform1i"); - qglUniform1fv = (PFNGLUNIFORM1FVPROC) SDL_GL_GetProcAddress("glUniform1fv"); - qglUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC) SDL_GL_GetProcAddress("glUniformMatrix4fv"); - qglValidateProgram = (PFNGLVALIDATEPROGRAMPROC) SDL_GL_GetProcAddress("glValidateProgram"); - qglVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC) SDL_GL_GetProcAddress("glVertexAttribPointer"); + QGL_2_0_PROCS; + +#undef GLE if (1) { From 9a5add2b604e9d6e5120d1c748e311f895e71908 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Mon, 25 Jul 2016 18:30:15 +0100 Subject: [PATCH 140/480] [tools/asm/q3asm.c] Remove 'abs(unsigned)', which is unnecessary and potentially wrong --- code/tools/asm/q3asm.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/tools/asm/q3asm.c b/code/tools/asm/q3asm.c index 191a9db6..54c6ab1e 100644 --- a/code/tools/asm/q3asm.c +++ b/code/tools/asm/q3asm.c @@ -477,7 +477,7 @@ static unsigned int HashString (const char *key) acc = (acc << 2) | (acc >> 30); acc &= 0xffffffffU; } - return abs(acc); + return acc; } @@ -1644,4 +1644,3 @@ Motivation: not wanting to scrollback for pages to find asm error. return errorCount; } - From 18d6c8fda279907e2d140e03c8f322bc8d1a4762 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Mon, 25 Jul 2016 18:30:48 +0100 Subject: [PATCH 141/480] [botlib] Use floating point absolute value rather than truncate to integer --- code/botlib/be_aas_entity.c | 4 ++-- code/botlib/be_aas_move.c | 2 +- code/botlib/be_aas_reach.c | 8 ++++---- code/botlib/be_ai_move.c | 2 +- code/tools/asm/q3asm.c | 1 + 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/code/botlib/be_aas_entity.c b/code/botlib/be_aas_entity.c index 02699bde..c78f9e71 100644 --- a/code/botlib/be_aas_entity.c +++ b/code/botlib/be_aas_entity.c @@ -390,9 +390,9 @@ int AAS_NearestEntity(vec3_t origin, int modelindex) ent = &aasworld.entities[i]; if (ent->i.modelindex != modelindex) continue; VectorSubtract(ent->i.origin, origin, dir); - if (abs(dir[0]) < 40) + if (fabsf(dir[0]) < 40) { - if (abs(dir[1]) < 40) + if (fabsf(dir[1]) < 40) { dist = VectorLength(dir); if (dist < bestdist) diff --git a/code/botlib/be_aas_move.c b/code/botlib/be_aas_move.c index c42b6cca..9ce95c6c 100644 --- a/code/botlib/be_aas_move.c +++ b/code/botlib/be_aas_move.c @@ -168,7 +168,7 @@ int AAS_AgainstLadder(vec3_t origin) //get the plane the face is in plane = &aasworld.planes[face->planenum ^ side]; //if the origin is pretty close to the plane - if (abs(DotProduct(plane->normal, origin) - plane->dist) < 3) + if (fabsf(DotProduct(plane->normal, origin) - plane->dist) < 3) { if (AAS_PointInsideFace(abs(facenum), origin, 0.1f)) return qtrue; } //end if diff --git a/code/botlib/be_aas_reach.c b/code/botlib/be_aas_reach.c index 379948aa..62acd477 100644 --- a/code/botlib/be_aas_reach.c +++ b/code/botlib/be_aas_reach.c @@ -2465,8 +2465,8 @@ int AAS_Reachability_Ladder(int area1num, int area2num) VectorMA(area1point, -32, dir, area1point); VectorMA(area2point, 32, dir, area2point); // - ladderface1vertical = abs(DotProduct(plane1->normal, up)) < 0.1; - ladderface2vertical = abs(DotProduct(plane2->normal, up)) < 0.1; + ladderface1vertical = fabsf(DotProduct(plane1->normal, up)) < 0.1; + ladderface2vertical = fabsf(DotProduct(plane2->normal, up)) < 0.1; //there's only reachability between vertical ladder faces if (!ladderface1vertical && !ladderface2vertical) return qfalse; //if both vertical ladder faces @@ -2474,7 +2474,7 @@ int AAS_Reachability_Ladder(int area1num, int area2num) //and the ladder faces do not make a sharp corner && DotProduct(plane1->normal, plane2->normal) > 0.7 //and the shared edge is not too vertical - && abs(DotProduct(sharededgevec, up)) < 0.7) + && fabsf(DotProduct(sharededgevec, up)) < 0.7) { //create a new reachability link lreach = AAS_AllocReachability(); @@ -2599,7 +2599,7 @@ int AAS_Reachability_Ladder(int area1num, int area2num) if (face2->faceflags & FACE_LADDER) { plane2 = &aasworld.planes[face2->planenum]; - if (abs(DotProduct(plane2->normal, up)) < 0.1) break; + if (fabsf(DotProduct(plane2->normal, up)) < 0.1) break; } //end if } //end for //if from another area without vertical ladder faces diff --git a/code/botlib/be_ai_move.c b/code/botlib/be_ai_move.c index 0c4de348..42232d65 100644 --- a/code/botlib/be_ai_move.c +++ b/code/botlib/be_ai_move.c @@ -2054,7 +2054,7 @@ bot_moveresult_t BotTravel_Elevator(bot_movestate_t *ms, aas_reachability_t *rea botimport.Print(PRT_MESSAGE, "bot on elevator\n"); #endif //DEBUG_ELEVATOR //if vertically not too far from the end point - if (abs(ms->origin[2] - reach->end[2]) < sv_maxbarrier->value) + if (fabsf(ms->origin[2] - reach->end[2]) < sv_maxbarrier->value) { #ifdef DEBUG_ELEVATOR botimport.Print(PRT_MESSAGE, "bot moving to end\n"); diff --git a/code/tools/asm/q3asm.c b/code/tools/asm/q3asm.c index 54c6ab1e..8be0124b 100644 --- a/code/tools/asm/q3asm.c +++ b/code/tools/asm/q3asm.c @@ -1644,3 +1644,4 @@ Motivation: not wanting to scrollback for pages to find asm error. return errorCount; } + From 716438168f160885fe1d8cc2e076e97901bd436c Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Tue, 26 Jul 2016 00:41:31 -0700 Subject: [PATCH 142/480] OpenGL2: Use loader for all extension funcs. --- code/renderercommon/qgl.h | 202 ++++++++---------------------- code/renderergl2/tr_backend.c | 2 +- code/renderergl2/tr_bsp.c | 2 +- code/renderergl2/tr_extensions.c | 208 +++++++++++++------------------ code/renderergl2/tr_image.c | 7 +- code/renderergl2/tr_init.c | 2 +- code/renderergl2/tr_local.h | 1 - code/renderergl2/tr_shade.c | 8 +- code/renderergl2/tr_vbo.c | 14 +-- 9 files changed, 158 insertions(+), 288 deletions(-) diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h index 6f27e130..6f70f644 100644 --- a/code/renderercommon/qgl.h +++ b/code/renderercommon/qgl.h @@ -438,14 +438,6 @@ extern void (APIENTRYP qglUnlockArraysEXT) (void); GLE(void, ValidateProgram, GLuint program) \ GLE(void, VertexAttribPointer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer) \ -#define GLE(ret, name, ...) typedef ret APIENTRY name##proc(__VA_ARGS__); extern name##proc * qgl##name; -QGL_1_2_PROCS -QGL_1_3_PROCS -QGL_1_4_PROCS -QGL_1_5_PROCS -QGL_2_0_PROCS -#undef GLE - // GL_NVX_gpu_memory_info #ifndef GL_NVX_gpu_memory_info #define GL_NVX_gpu_memory_info @@ -495,27 +487,18 @@ QGL_2_0_PROCS #endif // GL_EXT_framebuffer_object -extern GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer); -extern void (APIENTRY * qglBindRenderbufferEXT)(GLenum target, GLuint renderbuffer); -extern void (APIENTRY * qglDeleteRenderbuffersEXT)(GLsizei n, const GLuint *renderbuffers); -extern void (APIENTRY * qglGenRenderbuffersEXT)(GLsizei n, GLuint *renderbuffers); -extern void (APIENTRY * qglRenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -extern void (APIENTRY * qglGetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint *params); -extern GLboolean (APIENTRY * qglIsFramebufferEXT)(GLuint framebuffer); -extern void (APIENTRY * qglBindFramebufferEXT)(GLenum target, GLuint framebuffer); -extern void (APIENTRY * qglDeleteFramebuffersEXT)(GLsizei n, const GLuint *framebuffers); -extern void (APIENTRY * qglGenFramebuffersEXT)(GLsizei n, GLuint *framebuffers); -extern GLenum (APIENTRY * qglCheckFramebufferStatusEXT)(GLenum target); -extern void (APIENTRY * qglFramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, - GLint level); -extern void (APIENTRY * qglFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, - GLint level); -extern void (APIENTRY * qglFramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, - GLint level, GLint zoffset); -extern void (APIENTRY * qglFramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, - GLuint renderbuffer); -extern void (APIENTRY * qglGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint *params); -extern void (APIENTRY * qglGenerateMipmapEXT)(GLenum target); +#define QGL_EXT_framebuffer_object_PROCS \ + GLE(void, BindRenderbufferEXT, GLenum target, GLuint renderbuffer) \ + GLE(void, DeleteRenderbuffersEXT, GLsizei n, const GLuint *renderbuffers) \ + GLE(void, GenRenderbuffersEXT, GLsizei n, GLuint *renderbuffers) \ + GLE(void, RenderbufferStorageEXT, GLenum target, GLenum internalformat, GLsizei width, GLsizei height) \ + GLE(void, BindFramebufferEXT, GLenum target, GLuint framebuffer) \ + GLE(void, DeleteFramebuffersEXT, GLsizei n, const GLuint *framebuffers) \ + GLE(void, GenFramebuffersEXT, GLsizei n, GLuint *framebuffers) \ + GLE(GLenum, CheckFramebufferStatusEXT, GLenum target) \ + GLE(void, FramebufferTexture2DEXT, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \ + GLE(void, FramebufferRenderbufferEXT, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) \ + GLE(void, GenerateMipmapEXT, GLenum target) \ #ifndef GL_EXT_framebuffer_object #define GL_EXT_framebuffer_object @@ -572,19 +555,9 @@ extern void (APIENTRY * qglGenerateMipmapEXT)(GLenum target); #define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 #endif -// GL_EXT_packed_depth_stencil -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil -#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 -#endif - // GL_EXT_framebuffer_blit -extern void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, - GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, - GLbitfield mask, GLenum filter); +#define QGL_EXT_framebuffer_blit_PROCS \ + GLE(void, BlitFramebufferEXT, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) \ #ifndef GL_EXT_framebuffer_blit #define GL_EXT_framebuffer_blit @@ -595,8 +568,8 @@ extern void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint s #endif // GL_EXT_framebuffer_multisample -extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples, - GLenum internalformat, GLsizei width, GLsizei height); +#define QGL_EXT_framebuffer_multisample_PROCS \ + GLE(void, RenderbufferStorageMultisampleEXT, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \ #ifndef GL_EXT_framebuffer_multisample #define GL_EXT_framebuffer_multisample @@ -605,31 +578,6 @@ extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLs #define GL_MAX_SAMPLES_EXT 0x8D57 #endif -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB -#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 -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#endif - #ifndef GL_ARB_texture_compression_rgtc #define GL_ARB_texture_compression_rgtc #define GL_COMPRESSED_RED_RGTC1 0x8DBB @@ -657,91 +605,51 @@ extern void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLs #endif // GL_ARB_vertex_array_object -extern void (APIENTRY * qglBindVertexArrayARB)(GLuint array); -extern void (APIENTRY * qglDeleteVertexArraysARB)(GLsizei n, const GLuint *arrays); -extern void (APIENTRY * qglGenVertexArraysARB)(GLsizei n, GLuint *arrays); -extern GLboolean (APIENTRY * qglIsVertexArrayARB)(GLuint array); +#define QGL_ARB_vertex_array_object_PROCS \ + GLE(void, BindVertexArray, GLuint array) \ + GLE(void, DeleteVertexArrays, GLsizei n, const GLuint *arrays) \ + GLE(void, GenVertexArrays, GLsizei n, GLuint *arrays) \ + #ifndef GL_ARB_vertex_array_object #define GL_ARB_vertex_array_object #define GL_VERTEX_ARRAY_BINDING_ARB 0x85B5 #endif // GL_EXT_direct_state_access -extern GLvoid(APIENTRY * qglBindMultiTexture)(GLenum texunit, GLenum target, GLuint texture); -extern GLvoid(APIENTRY * qglTextureParameterf)(GLuint texture, GLenum target, GLenum pname, GLfloat param); -extern GLvoid(APIENTRY * qglTextureParameteri)(GLuint texture, GLenum target, GLenum pname, GLint param); -extern GLvoid(APIENTRY * qglTextureImage2D)(GLuint texture, GLenum target, GLint level, GLint internalformat, - GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -extern GLvoid(APIENTRY * qglTextureSubImage2D)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -extern GLvoid(APIENTRY * qglCopyTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat, - GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -extern GLvoid(APIENTRY * qglCompressedTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat, - GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -extern GLvoid(APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum target, GLint level, - GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, - GLsizei imageSize, const GLvoid *data); -extern GLvoid(APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target); +#define QGL_EXT_direct_state_access_PROCS \ + GLE(GLvoid, BindMultiTexture, GLenum texunit, GLenum target, GLuint texture) \ + GLE(GLvoid, TextureParameterf, GLuint texture, GLenum target, GLenum pname, GLfloat param) \ + GLE(GLvoid, TextureParameteri, GLuint texture, GLenum target, GLenum pname, GLint param) \ + GLE(GLvoid, TextureImage2D, GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) \ + GLE(GLvoid, TextureSubImage2D, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \ + GLE(GLvoid, CopyTextureImage2D, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) \ + GLE(GLvoid, CompressedTextureImage2D, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) \ + GLE(GLvoid, CompressedTextureSubImage2D, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) \ + GLE(GLvoid, GenerateTextureMipmap, GLuint texture, GLenum target) \ + GLE(GLvoid, ProgramUniform1i, GLuint program, GLint location, GLint v0) \ + GLE(GLvoid, ProgramUniform1f, GLuint program, GLint location, GLfloat v0) \ + GLE(GLvoid, ProgramUniform2f, GLuint program, GLint location, GLfloat v0, GLfloat v1) \ + GLE(GLvoid, ProgramUniform3f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \ + GLE(GLvoid, ProgramUniform4f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \ + GLE(GLvoid, ProgramUniform1fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) \ + GLE(GLvoid, ProgramUniformMatrix4fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \ + GLE(GLvoid, NamedRenderbufferStorage, GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) \ + GLE(GLvoid, NamedRenderbufferStorageMultisample, GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \ + GLE(GLenum, CheckNamedFramebufferStatus, GLuint framebuffer, GLenum target) \ + GLE(GLvoid, NamedFramebufferTexture2D, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \ + GLE(GLvoid, NamedFramebufferRenderbuffer, GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) \ -extern GLvoid(APIENTRY * qglProgramUniform1i)(GLuint program, GLint location, GLint v0); -extern GLvoid(APIENTRY * qglProgramUniform1f)(GLuint program, GLint location, GLfloat v0); -extern GLvoid(APIENTRY * qglProgramUniform2f)(GLuint program, GLint location, - GLfloat v0, GLfloat v1); -extern GLvoid(APIENTRY * qglProgramUniform3f)(GLuint program, GLint location, - GLfloat v0, GLfloat v1, GLfloat v2); -extern GLvoid(APIENTRY * qglProgramUniform4f)(GLuint program, GLint location, - GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -extern GLvoid(APIENTRY * qglProgramUniform1fv)(GLuint program, GLint location, - GLsizei count, const GLfloat *value); -extern GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location, - GLsizei count, GLboolean transpose, - const GLfloat *value); - -extern GLvoid(APIENTRY * qglNamedRenderbufferStorage)(GLuint renderbuffer, - GLenum internalformat, GLsizei width, GLsizei height); - -extern GLvoid(APIENTRY * qglNamedRenderbufferStorageMultisample)(GLuint renderbuffer, - GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - -extern GLenum(APIENTRY * qglCheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target); -extern GLvoid(APIENTRY * qglNamedFramebufferTexture2D)(GLuint framebuffer, - GLenum attachment, GLenum textarget, GLuint texture, GLint level); -extern GLvoid(APIENTRY * qglNamedFramebufferRenderbuffer)(GLuint framebuffer, - GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); - - - - -#if defined(WIN32) -// WGL_ARB_create_context -#ifndef WGL_ARB_create_context -#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 WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 -#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 -#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#define ERROR_INVALID_VERSION_ARB 0x2095 -#define ERROR_INVALID_PROFILE_ARB 0x2096 -#endif - -extern HGLRC(APIENTRY * qwglCreateContextAttribsARB) (HDC hdC, HGLRC hShareContext, const int *attribList); -#endif - -#if 0 //defined(__linux__) -// GLX_ARB_create_context -#ifndef GLX_ARB_create_context -#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 -#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 -#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define GLX_CONTEXT_FLAGS_ARB 0x2094 -#endif - -extern GLXContext (APIENTRY * qglXCreateContextAttribsARB) (Display *dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); -#endif +#define GLE(ret, name, ...) typedef ret APIENTRY name##proc(__VA_ARGS__); extern name##proc * qgl##name; +QGL_1_2_PROCS; +QGL_1_3_PROCS; +QGL_1_4_PROCS; +QGL_1_5_PROCS; +QGL_2_0_PROCS; +QGL_EXT_framebuffer_object_PROCS; +QGL_EXT_framebuffer_blit_PROCS; +QGL_EXT_framebuffer_multisample_PROCS; +QGL_ARB_vertex_array_object_PROCS; +QGL_EXT_direct_state_access_PROCS; +#undef GLE #endif diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index f9dcd038..b8ca113a 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -1184,7 +1184,7 @@ const void *RB_DrawSurfs( const void *data ) { RB_DrawSun(0.1, tr.sunShader); } - if (r_drawSunRays->integer) + if (glRefConfig.framebufferObject && r_drawSunRays->integer) { FBO_t *oldFbo = glState.currentFBO; FBO_Bind(tr.sunRaysFbo); diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index 2b3f0a55..2feeddb7 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -3526,7 +3526,7 @@ void RE_LoadWorldMap( const char *name ) { R_BindNullVao(); // Render or load all cubemaps - if (r_cubeMapping->integer && tr.numCubemaps) + if (r_cubeMapping->integer && tr.numCubemaps && glRefConfig.framebufferObject) { R_LoadCubemaps(); R_RenderMissingCubemaps(); diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index e1500790..3882434c 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -36,6 +36,11 @@ QGL_1_3_PROCS; QGL_1_4_PROCS; QGL_1_5_PROCS; QGL_2_0_PROCS; +QGL_EXT_framebuffer_object_PROCS; +QGL_EXT_framebuffer_blit_PROCS; +QGL_EXT_framebuffer_multisample_PROCS; +QGL_ARB_vertex_array_object_PROCS; +QGL_EXT_direct_state_access_PROCS; #undef GLE // GL_EXT_framebuffer_object @@ -142,18 +147,23 @@ void GLimp_InitExtraExtensions() char *extension; const char* result[3] = { "...ignoring %s\n", "...using %s\n", "...%s not found\n" }; + // Check OpenGL version sscanf(glConfig.version_string, "%d.%d", &glRefConfig.openglMajorVersion, &glRefConfig.openglMinorVersion); if (glRefConfig.openglMajorVersion < 2) ri.Error(ERR_FATAL, "OpenGL 2.0 required!"); ri.Printf(PRINT_ALL, "...using OpenGL %s\n", glConfig.version_string); - // GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a + // set DSA fallbacks +#define GLE(ret, name, ...) qgl##name = GLDSA_##name; + QGL_EXT_direct_state_access_PROCS; +#undef GLE + // GL function loader, based on https://gist.github.com/rygorous/16796a0c876cf8a5f542caddb55bce8a #define GLE(ret, name, ...) qgl##name = (name##proc *) SDL_GL_GetProcAddress("gl" #name); // OpenGL 1.2, was GL_EXT_draw_range_elements QGL_1_2_PROCS; - glRefConfig.drawRangeElements = r_ext_draw_range_elements->integer ? qtrue : qfalse; + glRefConfig.drawRangeElements = !!r_ext_draw_range_elements->integer; ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glDrawRangeElements()"); // OpenGL 1.3, was GL_ARB_texture_compression @@ -161,8 +171,8 @@ void GLimp_InitExtraExtensions() // OpenGL 1.4, was GL_EXT_multi_draw_arrays QGL_1_4_PROCS; - glRefConfig.drawRangeElements = r_ext_multi_draw_arrays->integer ? qtrue : qfalse; - ri.Printf(PRINT_ALL, result[glRefConfig.drawRangeElements], "glMultiDrawElements()"); + glRefConfig.multiDrawArrays = !!r_ext_multi_draw_arrays->integer; + ri.Printf(PRINT_ALL, result[glRefConfig.multiDrawArrays], "glMultiDrawElements()"); // OpenGL 1.5, was GL_ARB_vertex_buffer_object and GL_ARB_occlusion_query QGL_1_5_PROCS; @@ -171,8 +181,7 @@ void GLimp_InitExtraExtensions() // OpenGL 2.0, was GL_ARB_shading_language_100, GL_ARB_vertex_program, GL_ARB_shader_objects, and GL_ARB_vertex_shader QGL_2_0_PROCS; -#undef GLE - + // Determine GLSL version if (1) { char version[256]; @@ -186,23 +195,45 @@ void GLimp_InitExtraExtensions() glRefConfig.memInfo = MI_NONE; - if( GLimp_HaveExtension( "GL_NVX_gpu_memory_info" ) ) + // GL_NVX_gpu_memory_info + extension = "GL_NVX_gpu_memory_info"; + if( GLimp_HaveExtension( extension ) ) { glRefConfig.memInfo = MI_NVX; + + ri.Printf(PRINT_ALL, result[1], extension); } - else if( GLimp_HaveExtension( "GL_ATI_meminfo" ) ) + else { - glRefConfig.memInfo = MI_ATI; + ri.Printf(PRINT_ALL, result[2], extension); } + // GL_ATI_meminfo + extension = "GL_ATI_meminfo"; + if( GLimp_HaveExtension( extension ) ) + { + if (glRefConfig.memInfo == MI_NONE) + { + glRefConfig.memInfo = MI_ATI; + + ri.Printf(PRINT_ALL, result[1], extension); + } + else + { + ri.Printf(PRINT_ALL, result[0], extension); + } + } + else + { + ri.Printf(PRINT_ALL, result[2], extension); + } + + // GL_ARB_texture_non_power_of_two extension = "GL_ARB_texture_non_power_of_two"; glRefConfig.textureNonPowerOfTwo = qfalse; if( GLimp_HaveExtension( extension ) ) { - if(1) //(r_ext_texture_non_power_of_two->integer) - { - glRefConfig.textureNonPowerOfTwo = qtrue; - } + glRefConfig.textureNonPowerOfTwo = qtrue; // !!r_ext_texture_non_power_of_two->integer ri.Printf(PRINT_ALL, result[glRefConfig.textureNonPowerOfTwo], extension); } @@ -216,10 +247,7 @@ void GLimp_InitExtraExtensions() glRefConfig.textureFloat = qfalse; if( GLimp_HaveExtension( extension ) ) { - if( r_ext_texture_float->integer ) - { - glRefConfig.textureFloat = qtrue; - } + glRefConfig.textureFloat = !!r_ext_texture_float->integer; ri.Printf(PRINT_ALL, result[glRefConfig.textureFloat], extension); } @@ -233,8 +261,7 @@ void GLimp_InitExtraExtensions() glRefConfig.halfFloatPixel = qfalse; if( GLimp_HaveExtension( extension ) ) { - if( r_arb_half_float_pixel->integer ) - glRefConfig.halfFloatPixel = qtrue; + glRefConfig.halfFloatPixel = !!r_arb_half_float_pixel->integer; ri.Printf(PRINT_ALL, result[glRefConfig.halfFloatPixel], extension); } @@ -248,29 +275,12 @@ void GLimp_InitExtraExtensions() glRefConfig.framebufferObject = qfalse; if( GLimp_HaveExtension( extension ) ) { + glRefConfig.framebufferObject = !!r_ext_framebuffer_object->integer; + glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE_EXT, &glRefConfig.maxRenderbufferSize); glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS_EXT, &glRefConfig.maxColorAttachments); - qglIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glIsRenderbufferEXT"); - qglBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glBindRenderbufferEXT"); - qglDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC) SDL_GL_GetProcAddress("glDeleteRenderbuffersEXT"); - qglGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC) SDL_GL_GetProcAddress("glGenRenderbuffersEXT"); - qglRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC) SDL_GL_GetProcAddress("glRenderbufferStorageEXT"); - qglGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) SDL_GL_GetProcAddress("glGetRenderbufferParameterivEXT"); - qglIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC) SDL_GL_GetProcAddress("glIsFramebufferEXT"); - qglBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) SDL_GL_GetProcAddress("glBindFramebufferEXT"); - qglDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) SDL_GL_GetProcAddress("glDeleteFramebuffersEXT"); - qglGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) SDL_GL_GetProcAddress("glGenFramebuffersEXT"); - qglCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) SDL_GL_GetProcAddress("glCheckFramebufferStatusEXT"); - qglFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) SDL_GL_GetProcAddress("glFramebufferTexture1DEXT"); - qglFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) SDL_GL_GetProcAddress("glFramebufferTexture2DEXT"); - qglFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) SDL_GL_GetProcAddress("glFramebufferTexture3DEXT"); - qglFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) SDL_GL_GetProcAddress("glFramebufferRenderbufferEXT"); - qglGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) SDL_GL_GetProcAddress("glGetFramebufferAttachmentParameterivEXT"); - qglGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC) SDL_GL_GetProcAddress("glGenerateMipmapEXT"); - - if(r_ext_framebuffer_object->value) - glRefConfig.framebufferObject = qtrue; + QGL_EXT_framebuffer_object_PROCS; ri.Printf(PRINT_ALL, result[glRefConfig.framebufferObject], extension); } @@ -279,26 +289,15 @@ void GLimp_InitExtraExtensions() ri.Printf(PRINT_ALL, result[2], extension); } - // GL_EXT_packed_depth_stencil - extension = "GL_EXT_packed_depth_stencil"; - glRefConfig.packedDepthStencil = qfalse; - if( GLimp_HaveExtension(extension)) - { - glRefConfig.packedDepthStencil = qtrue; - ri.Printf(PRINT_ALL, result[glRefConfig.packedDepthStencil], extension); - } - else - { - ri.Printf(PRINT_ALL, result[2], extension); - } - // GL_EXT_framebuffer_blit extension = "GL_EXT_framebuffer_blit"; glRefConfig.framebufferBlit = qfalse; if (GLimp_HaveExtension(extension)) { - qglBlitFramebufferEXT = (void *)SDL_GL_GetProcAddress("glBlitFramebufferEXT"); glRefConfig.framebufferBlit = qtrue; + + QGL_EXT_framebuffer_blit_PROCS; + ri.Printf(PRINT_ALL, result[glRefConfig.framebufferBlit], extension); } else @@ -311,8 +310,10 @@ void GLimp_InitExtraExtensions() glRefConfig.framebufferMultisample = qfalse; if (GLimp_HaveExtension(extension)) { - qglRenderbufferStorageMultisampleEXT = (void *)SDL_GL_GetProcAddress("glRenderbufferStorageMultisampleEXT"); glRefConfig.framebufferMultisample = qtrue; + + QGL_EXT_framebuffer_multisample_PROCS; + ri.Printf(PRINT_ALL, result[glRefConfig.framebufferMultisample], extension); } else @@ -326,10 +327,12 @@ void GLimp_InitExtraExtensions() extension = "GL_ARB_texture_compression_rgtc"; if (GLimp_HaveExtension(extension)) { - if (r_ext_compressed_textures->integer) + qboolean useRgtc = r_ext_compressed_textures->integer >= 1; + + if (useRgtc) glRefConfig.textureCompression |= TCR_RGTC; - ri.Printf(PRINT_ALL, result[r_ext_compressed_textures->integer ? 1 : 0], extension); + ri.Printf(PRINT_ALL, result[useRgtc], extension); } else { @@ -342,10 +345,12 @@ void GLimp_InitExtraExtensions() extension = "GL_ARB_texture_compression_bptc"; if (GLimp_HaveExtension(extension)) { - if (r_ext_compressed_textures->integer >= 2) + qboolean useBptc = r_ext_compressed_textures->integer >= 2; + + if (useBptc) glRefConfig.textureCompression |= TCR_BPTC; - ri.Printf(PRINT_ALL, result[(r_ext_compressed_textures->integer >= 2) ? 1 : 0], extension); + ri.Printf(PRINT_ALL, result[useBptc], extension); } else { @@ -358,7 +363,8 @@ void GLimp_InitExtraExtensions() if( GLimp_HaveExtension( extension ) ) { glRefConfig.depthClamp = qtrue; - ri.Printf(PRINT_ALL, result[1], extension); + + ri.Printf(PRINT_ALL, result[glRefConfig.depthClamp], extension); } else { @@ -370,8 +376,7 @@ void GLimp_InitExtraExtensions() glRefConfig.seamlessCubeMap = qfalse; if( GLimp_HaveExtension( extension ) ) { - if (r_arb_seamless_cube_map->integer) - glRefConfig.seamlessCubeMap = qtrue; + glRefConfig.seamlessCubeMap = !!r_arb_seamless_cube_map->integer; ri.Printf(PRINT_ALL, result[glRefConfig.seamlessCubeMap], extension); } @@ -385,10 +390,12 @@ void GLimp_InitExtraExtensions() glRefConfig.packedNormalDataType = GL_BYTE; if( GLimp_HaveExtension( extension ) ) { - if (r_arb_vertex_type_2_10_10_10_rev->integer) + qboolean useExt = !!r_arb_vertex_type_2_10_10_10_rev->integer; + + if (useExt) glRefConfig.packedNormalDataType = GL_INT_2_10_10_10_REV; - ri.Printf(PRINT_ALL, result[r_arb_vertex_type_2_10_10_10_rev->integer ? 1 : 0], extension); + ri.Printf(PRINT_ALL, result[useExt], extension); } else { @@ -403,15 +410,11 @@ void GLimp_InitExtraExtensions() glRefConfig.vertexArrayObject = qfalse; if( GLimp_HaveExtension( extension ) ) { - qglBindVertexArrayARB = (void *) SDL_GL_GetProcAddress("glBindVertexArray"); - qglDeleteVertexArraysARB = (void *) SDL_GL_GetProcAddress("glDeleteVertexArrays"); - qglGenVertexArraysARB = (void *) SDL_GL_GetProcAddress("glGenVertexArrays"); - qglIsVertexArrayARB = (void *) SDL_GL_GetProcAddress("glIsVertexArray"); + glRefConfig.vertexArrayObject = !!r_arb_vertex_array_object->integer; - if (r_arb_vertex_array_object->integer) - glRefConfig.vertexArrayObject = qtrue; + QGL_ARB_vertex_array_object_PROCS; - ri.Printf(PRINT_ALL, result[glRefConfig.vertexArrayObject ? 1 : 0], extension); + ri.Printf(PRINT_ALL, result[glRefConfig.vertexArrayObject], extension); } else { @@ -426,7 +429,9 @@ void GLimp_InitExtraExtensions() glRefConfig.packedColorDataSize = sizeof(float) * 4; if( GLimp_HaveExtension( extension ) ) { - if (r_arb_half_float_vertex->integer) + qboolean useExt = !!r_arb_half_float_vertex->integer; + + if (useExt) { glRefConfig.packedTexcoordDataType = GL_HALF_FLOAT; glRefConfig.packedTexcoordDataSize = sizeof(uint16_t) * 2; @@ -434,7 +439,7 @@ void GLimp_InitExtraExtensions() glRefConfig.packedColorDataSize = sizeof(uint16_t) * 4; } - ri.Printf(PRINT_ALL, result[r_arb_half_float_vertex->integer ? 1 : 0], extension); + ri.Printf(PRINT_ALL, result[useExt], extension); } else { @@ -443,66 +448,23 @@ void GLimp_InitExtraExtensions() // GL_EXT_direct_state_access extension = "GL_EXT_direct_state_access"; - - qglBindMultiTexture = GLDSA_BindMultiTexture; - qglTextureParameterf = GLDSA_TextureParameterf; - qglTextureParameteri = GLDSA_TextureParameteri; - qglTextureImage2D = GLDSA_TextureImage2D; - qglTextureSubImage2D = GLDSA_TextureSubImage2D; - qglCopyTextureImage2D = GLDSA_CopyTextureImage2D; - qglCompressedTextureImage2D = GLDSA_CompressedTextureImage2D; - qglCompressedTextureSubImage2D = GLDSA_CompressedTextureSubImage2D; - qglGenerateTextureMipmap = GLDSA_GenerateTextureMipmap; - - qglProgramUniform1i = GLDSA_ProgramUniform1i; - qglProgramUniform1f = GLDSA_ProgramUniform1f; - qglProgramUniform2f = GLDSA_ProgramUniform2f; - qglProgramUniform3f = GLDSA_ProgramUniform3f; - qglProgramUniform4f = GLDSA_ProgramUniform4f; - qglProgramUniform1fv = GLDSA_ProgramUniform1fv; - qglProgramUniformMatrix4fv = GLDSA_ProgramUniformMatrix4fv; - - qglNamedRenderbufferStorage = GLDSA_NamedRenderbufferStorage; - qglNamedRenderbufferStorageMultisample = GLDSA_NamedRenderbufferStorageMultisample; - qglCheckNamedFramebufferStatus = GLDSA_CheckNamedFramebufferStatus; - qglNamedFramebufferTexture2D = GLDSA_NamedFramebufferTexture2D; - qglNamedFramebufferRenderbuffer = GLDSA_NamedFramebufferRenderbuffer; - glRefConfig.directStateAccess = qfalse; if (GLimp_HaveExtension(extension)) { - if (r_ext_direct_state_access->integer) + glRefConfig.directStateAccess = !!r_ext_direct_state_access->integer; + + // QGL_*_PROCS becomes several functions, do not remove {} + if (glRefConfig.directStateAccess) { - glRefConfig.directStateAccess = qtrue; - qglBindMultiTexture = (void *)SDL_GL_GetProcAddress("glBindMultiTextureEXT"); - qglTextureParameterf = (void *)SDL_GL_GetProcAddress("glTextureParameterfEXT"); - qglTextureParameteri = (void *)SDL_GL_GetProcAddress("glTextureParameteriEXT"); - qglTextureImage2D = (void *)SDL_GL_GetProcAddress("glTextureImage2DEXT"); - qglTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glTextureSubImage2DEXT"); - qglCopyTextureImage2D = (void *)SDL_GL_GetProcAddress("glCopyTextureImage2DEXT"); - qglCompressedTextureImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureImage2DEXT"); - qglCompressedTextureSubImage2D = (void *)SDL_GL_GetProcAddress("glCompressedTextureSubImage2DEXT"); - qglGenerateTextureMipmap = (void *)SDL_GL_GetProcAddress("glGenerateTextureMipmapEXT"); - - qglProgramUniform1i = (void *)SDL_GL_GetProcAddress("glProgramUniform1iEXT"); - qglProgramUniform1f = (void *)SDL_GL_GetProcAddress("glProgramUniform1fEXT"); - qglProgramUniform2f = (void *)SDL_GL_GetProcAddress("glProgramUniform2fEXT"); - qglProgramUniform3f = (void *)SDL_GL_GetProcAddress("glProgramUniform3fEXT"); - qglProgramUniform4f = (void *)SDL_GL_GetProcAddress("glProgramUniform4fEXT"); - qglProgramUniform1fv = (void *)SDL_GL_GetProcAddress("glProgramUniform1fvEXT"); - qglProgramUniformMatrix4fv = (void *)SDL_GL_GetProcAddress("glProgramUniformMatrix4fvEXT"); - - qglNamedRenderbufferStorage = (void *)SDL_GL_GetProcAddress("glNamedRenderbufferStorageEXT"); - qglNamedRenderbufferStorageMultisample = (void *)SDL_GL_GetProcAddress("glNamedRenderbufferStorageMultisampleEXT"); - qglCheckNamedFramebufferStatus = (void *)SDL_GL_GetProcAddress("glCheckNamedFramebufferStatusEXT"); - qglNamedFramebufferTexture2D = (void *)SDL_GL_GetProcAddress("glNamedFramebufferTexture2DEXT"); - qglNamedFramebufferRenderbuffer = (void *)SDL_GL_GetProcAddress("glNamedFramebufferRenderbufferEXT"); + QGL_EXT_direct_state_access_PROCS; } - ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess ? 1 : 0], extension); + ri.Printf(PRINT_ALL, result[glRefConfig.directStateAccess], extension); } else { ri.Printf(PRINT_ALL, result[2], extension); } + +#undef GLE } diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index 7f8f2460..f2670699 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -2763,11 +2763,8 @@ void R_CreateBuiltinImages( void ) { if (r_drawSunRays->integer) tr.sunRaysImage = R_CreateImage("*sunRays", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, rgbFormat); - if (glRefConfig.framebufferObject) - { - tr.renderDepthImage = R_CreateImage("*renderdepth", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB); - tr.textureDepthImage = R_CreateImage("*texturedepth", NULL, PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB); - } + tr.renderDepthImage = R_CreateImage("*renderdepth", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB); + tr.textureDepthImage = R_CreateImage("*texturedepth", NULL, PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB); { unsigned short sdata[4]; diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 73c1c55f..60c62abf 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -974,7 +974,7 @@ void GL_SetDefaultState( void ) GL_BindNullProgram(); if (glRefConfig.vertexArrayObject) - qglBindVertexArrayARB(0); + qglBindVertexArray(0); qglBindBuffer(GL_ARRAY_BUFFER, 0); qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 202e1af9..e81f854b 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1402,7 +1402,6 @@ typedef struct { qboolean textureNonPowerOfTwo; qboolean textureFloat; qboolean halfFloatPixel; - qboolean packedDepthStencil; textureCompressionRef_t textureCompression; qboolean swizzleNormalmap; diff --git a/code/renderergl2/tr_shade.c b/code/renderergl2/tr_shade.c index 356f2135..1cfc42d8 100644 --- a/code/renderergl2/tr_shade.c +++ b/code/renderergl2/tr_shade.c @@ -1292,7 +1292,9 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) if (r_sunlightMode->integer && (backEnd.viewParms.flags & VPF_USESUNLIGHT) && (pStage->glslShaderIndex & LIGHTDEF_LIGHTTYPE_MASK)) { - GL_BindToTMU(tr.screenShadowImage, TB_SHADOWMAP); + // FIXME: screenShadowImage is NULL if no framebuffers + if (tr.screenShadowImage) + GL_BindToTMU(tr.screenShadowImage, TB_SHADOWMAP); GLSL_SetUniformVec3(sp, UNIFORM_PRIMARYLIGHTAMBIENT, backEnd.refdef.sunAmbCol); if (r_pbr->integer) { @@ -1404,7 +1406,9 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input ) vec4_t vec; cubemap_t *cubemap = &tr.cubemaps[input->cubemapIndex - 1]; - GL_BindToTMU( cubemap->image, TB_CUBEMAP); + // FIXME: cubemap image could be NULL if cubemap isn't renderer or loaded + if (cubemap->image) + GL_BindToTMU( cubemap->image, TB_CUBEMAP); VectorSubtract(cubemap->origin, backEnd.viewParms.or.origin, vec); vec[3] = 1.0f; diff --git a/code/renderergl2/tr_vbo.c b/code/renderergl2/tr_vbo.c index 61ede4e1..b1ff3d60 100644 --- a/code/renderergl2/tr_vbo.c +++ b/code/renderergl2/tr_vbo.c @@ -262,8 +262,8 @@ vao_t *R_CreateVao(const char *name, byte *vertexes, int vertexesSize, byte *ind if (glRefConfig.vertexArrayObject) { - qglGenVertexArraysARB(1, &vao->vao); - qglBindVertexArrayARB(vao->vao); + qglGenVertexArrays(1, &vao->vao); + qglBindVertexArray(vao->vao); } @@ -383,8 +383,8 @@ vao_t *R_CreateVao2(const char *name, int numVertexes, srfVert_t *verts, int num if (glRefConfig.vertexArrayObject) { - qglGenVertexArraysARB(1, &vao->vao); - qglBindVertexArrayARB(vao->vao); + qglGenVertexArrays(1, &vao->vao); + qglBindVertexArray(vao->vao); } @@ -480,7 +480,7 @@ void R_BindVao(vao_t * vao) if (glRefConfig.vertexArrayObject) { - qglBindVertexArrayARB(vao->vao); + qglBindVertexArray(vao->vao); // why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel? if (1) @@ -515,7 +515,7 @@ void R_BindNullVao(void) { if (glRefConfig.vertexArrayObject) { - qglBindVertexArrayARB(0); + qglBindVertexArray(0); // why you no save GL_ELEMENT_ARRAY_BUFFER binding, Intel? if (1) qglBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); @@ -654,7 +654,7 @@ void R_ShutdownVaos(void) vao = tr.vaos[i]; if(vao->vao) - qglDeleteVertexArraysARB(1, &vao->vao); + qglDeleteVertexArrays(1, &vao->vao); if(vao->vertexesVBO) { From bbe99a8c6b62f7234acaeb35d26dbb10c2783e6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20K=C3=B6ppe?= Date: Tue, 26 Jul 2016 10:52:15 +0100 Subject: [PATCH 143/480] [null/null_glimp.c] Fix up bitrot in null impl --- code/null/null_glimp.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/code/null/null_glimp.c b/code/null/null_glimp.c index 2fc6aff1..558d2d12 100644 --- a/code/null/null_glimp.c +++ b/code/null/null_glimp.c @@ -19,7 +19,7 @@ along with Quake III Arena source code; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ -#include "tr_common.h" +#include "../renderercommon/tr_common.h" qboolean ( * qwglSwapIntervalEXT)( int interval ); @@ -35,8 +35,7 @@ void ( * qglUnlockArraysEXT) ( void ); void GLimp_EndFrame( void ) { } -int GLimp_Init( void ) -{ +void GLimp_Init( void ) { } void GLimp_Shutdown( void ) { @@ -45,12 +44,18 @@ void GLimp_Shutdown( void ) { void GLimp_EnableLogging( qboolean enable ) { } -void GLimp_LogComment( char *comment ) { +void GLimp_LogComment( char *comment ) { } -qboolean QGL_Init( const char *dllname ) { +qboolean QGL_Init( const char *dllname ) { return qtrue; } void QGL_Shutdown( void ) { } + +void GLimp_SetGamma( unsigned char red[256], unsigned char green[256], unsigned char blue[256] ) { +} + +void GLimp_Minimize( void ) { +} From 8c6d43e6be5693145ee971b5b1be3c2e587a633f Mon Sep 17 00:00:00 2001 From: Sebastian Buchwald Date: Tue, 26 Jul 2016 14:39:18 +0200 Subject: [PATCH 144/480] Remove dead variables --- code/qcommon/cm_patch.c | 5 ++--- code/qcommon/common.c | 7 +------ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/code/qcommon/cm_patch.c b/code/qcommon/cm_patch.c index e4b90002..c1465b50 100644 --- a/code/qcommon/cm_patch.c +++ b/code/qcommon/cm_patch.c @@ -826,7 +826,7 @@ CM_AddFacetBevels void CM_AddFacetBevels( facet_t *facet ) { int i, j, k, l; - int axis, dir, order, flipped; + int axis, dir, flipped; float plane[4], d, newplane[4]; winding_t *w, *w2; vec3_t mins, maxs, vec, vec2; @@ -852,10 +852,9 @@ void CM_AddFacetBevels( facet_t *facet ) { WindingBounds(w, mins, maxs); // add the axial planes - order = 0; for ( axis = 0 ; axis < 3 ; axis++ ) { - for ( dir = -1 ; dir <= 1 ; dir += 2, order++ ) + for ( dir = -1 ; dir <= 1 ; dir += 2 ) { VectorClear(plane); plane[axis] = dir; diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 84b5f628..a932193f 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -899,7 +899,6 @@ Z_FreeTags ================ */ void Z_FreeTags( int tag ) { - int count; memzone_t *zone; if ( tag == TAG_SMALL ) { @@ -908,13 +907,11 @@ void Z_FreeTags( int tag ) { else { zone = mainzone; } - count = 0; // use the rover as our pointer, because // Z_Free automatically adjusts it zone->rover = zone->blocklist.next; do { if ( zone->rover->tag == tag ) { - count++; Z_Free( (void *)(zone->rover + 1) ); continue; } @@ -1268,7 +1265,7 @@ Com_Meminfo_f void Com_Meminfo_f( void ) { memblock_t *block; int zoneBytes, zoneBlocks; - int smallZoneBytes, smallZoneBlocks; + int smallZoneBytes; int botlibBytes, rendererBytes; int unused; @@ -1306,11 +1303,9 @@ void Com_Meminfo_f( void ) { } smallZoneBytes = 0; - smallZoneBlocks = 0; for (block = smallzone->blocklist.next ; ; block = block->next) { if ( block->tag ) { smallZoneBytes += block->size; - smallZoneBlocks++; } if (block->next == &smallzone->blocklist) { From 5eae6de2f4c587023e48f4cb00d75eee8cfdb4f5 Mon Sep 17 00:00:00 2001 From: Sebastian Buchwald Date: Tue, 26 Jul 2016 14:41:03 +0200 Subject: [PATCH 145/480] Fix some typos in comments --- code/game/g_combat.c | 2 +- code/qcommon/cm_patch.c | 4 ++-- code/qcommon/files.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/g_combat.c b/code/game/g_combat.c index b981c581..7e1f1f4e 100644 --- a/code/game/g_combat.c +++ b/code/game/g_combat.c @@ -815,7 +815,7 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, return; } - // the intermission has allready been qualified for, so don't + // the intermission has already been qualified for, so don't // allow any extra scoring if ( level.intermissionQueued ) { return; diff --git a/code/qcommon/cm_patch.c b/code/qcommon/cm_patch.c index e4b90002..1a33308e 100644 --- a/code/qcommon/cm_patch.c +++ b/code/qcommon/cm_patch.c @@ -869,7 +869,7 @@ void CM_AddFacetBevels( facet_t *facet ) { if (CM_PlaneEqual(&planes[facet->surfacePlane], plane, &flipped)) { continue; } - // see if the plane is allready present + // see if the plane is already present for ( i = 0 ; i < facet->numBorders ; i++ ) { if (CM_PlaneEqual(&planes[facet->borderPlanes[i]], plane, &flipped)) break; @@ -933,7 +933,7 @@ void CM_AddFacetBevels( facet_t *facet ) { if (CM_PlaneEqual(&planes[facet->surfacePlane], plane, &flipped)) { continue; } - // see if the plane is allready present + // see if the plane is already present for ( i = 0 ; i < facet->numBorders ; i++ ) { if (CM_PlaneEqual(&planes[facet->borderPlanes[i]], plane, &flipped)) { break; diff --git a/code/qcommon/files.c b/code/qcommon/files.c index 3b4a8aeb..4df92f63 100644 --- a/code/qcommon/files.c +++ b/code/qcommon/files.c @@ -2208,7 +2208,7 @@ static int FS_AddFileToList( char *name, char *list[MAX_FOUND_FILES], int nfiles } for ( i = 0 ; i < nfiles ; i++ ) { if ( !Q_stricmp( name, list[i] ) ) { - return nfiles; // allready in list + return nfiles; // already in list } } list[nfiles] = CopyString( name ); From e022abeebb83e38431f010afd652b8de32ab0c1a Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 28 Jul 2016 20:04:25 -0700 Subject: [PATCH 146/480] OpenGL2: Fix GL_EXT_direct_state_access function names. --- code/renderercommon/qgl.h | 42 +++++++-------- code/renderergl2/tr_backend.c | 20 +++---- code/renderergl2/tr_dsa.c | 46 ++++++++-------- code/renderergl2/tr_dsa.h | 42 +++++++-------- code/renderergl2/tr_extensions.c | 90 -------------------------------- code/renderergl2/tr_fbo.c | 14 ++--- code/renderergl2/tr_glsl.c | 14 ++--- code/renderergl2/tr_image.c | 48 ++++++++--------- 8 files changed, 113 insertions(+), 203 deletions(-) diff --git a/code/renderercommon/qgl.h b/code/renderercommon/qgl.h index 6f70f644..6d8629f6 100644 --- a/code/renderercommon/qgl.h +++ b/code/renderercommon/qgl.h @@ -617,27 +617,27 @@ extern void (APIENTRYP qglUnlockArraysEXT) (void); // GL_EXT_direct_state_access #define QGL_EXT_direct_state_access_PROCS \ - GLE(GLvoid, BindMultiTexture, GLenum texunit, GLenum target, GLuint texture) \ - GLE(GLvoid, TextureParameterf, GLuint texture, GLenum target, GLenum pname, GLfloat param) \ - GLE(GLvoid, TextureParameteri, GLuint texture, GLenum target, GLenum pname, GLint param) \ - GLE(GLvoid, TextureImage2D, GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) \ - GLE(GLvoid, TextureSubImage2D, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \ - GLE(GLvoid, CopyTextureImage2D, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) \ - GLE(GLvoid, CompressedTextureImage2D, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) \ - GLE(GLvoid, CompressedTextureSubImage2D, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) \ - GLE(GLvoid, GenerateTextureMipmap, GLuint texture, GLenum target) \ - GLE(GLvoid, ProgramUniform1i, GLuint program, GLint location, GLint v0) \ - GLE(GLvoid, ProgramUniform1f, GLuint program, GLint location, GLfloat v0) \ - GLE(GLvoid, ProgramUniform2f, GLuint program, GLint location, GLfloat v0, GLfloat v1) \ - GLE(GLvoid, ProgramUniform3f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \ - GLE(GLvoid, ProgramUniform4f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \ - GLE(GLvoid, ProgramUniform1fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) \ - GLE(GLvoid, ProgramUniformMatrix4fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \ - GLE(GLvoid, NamedRenderbufferStorage, GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) \ - GLE(GLvoid, NamedRenderbufferStorageMultisample, GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \ - GLE(GLenum, CheckNamedFramebufferStatus, GLuint framebuffer, GLenum target) \ - GLE(GLvoid, NamedFramebufferTexture2D, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \ - GLE(GLvoid, NamedFramebufferRenderbuffer, GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) \ + GLE(GLvoid, BindMultiTextureEXT, GLenum texunit, GLenum target, GLuint texture) \ + GLE(GLvoid, TextureParameterfEXT, GLuint texture, GLenum target, GLenum pname, GLfloat param) \ + GLE(GLvoid, TextureParameteriEXT, GLuint texture, GLenum target, GLenum pname, GLint param) \ + GLE(GLvoid, TextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) \ + GLE(GLvoid, TextureSubImage2DEXT, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) \ + GLE(GLvoid, CopyTextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) \ + GLE(GLvoid, CompressedTextureImage2DEXT, GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) \ + GLE(GLvoid, CompressedTextureSubImage2DEXT, GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) \ + GLE(GLvoid, GenerateTextureMipmapEXT, GLuint texture, GLenum target) \ + GLE(GLvoid, ProgramUniform1iEXT, GLuint program, GLint location, GLint v0) \ + GLE(GLvoid, ProgramUniform1fEXT, GLuint program, GLint location, GLfloat v0) \ + GLE(GLvoid, ProgramUniform2fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1) \ + GLE(GLvoid, ProgramUniform3fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) \ + GLE(GLvoid, ProgramUniform4fEXT, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) \ + GLE(GLvoid, ProgramUniform1fvEXT, GLuint program, GLint location, GLsizei count, const GLfloat *value) \ + GLE(GLvoid, ProgramUniformMatrix4fvEXT, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) \ + GLE(GLvoid, NamedRenderbufferStorageEXT, GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) \ + GLE(GLvoid, NamedRenderbufferStorageMultisampleEXT, GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) \ + GLE(GLenum, CheckNamedFramebufferStatusEXT, GLuint framebuffer, GLenum target) \ + GLE(GLvoid, NamedFramebufferTexture2DEXT, GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) \ + GLE(GLvoid, NamedFramebufferRenderbufferEXT, GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) \ #define GLE(ret, name, ...) typedef ret APIENTRY name##proc(__VA_ARGS__); extern name##proc * qgl##name; QGL_1_2_PROCS; diff --git a/code/renderergl2/tr_backend.c b/code/renderergl2/tr_backend.c index b8ca113a..82a353de 100644 --- a/code/renderergl2/tr_backend.c +++ b/code/renderergl2/tr_backend.c @@ -808,16 +808,16 @@ void RE_UploadCinematic (int w, int h, int cols, int rows, const byte *data, int if ( cols != tr.scratchImage[client]->width || rows != tr.scratchImage[client]->height ) { tr.scratchImage[client]->width = tr.scratchImage[client]->uploadWidth = cols; tr.scratchImage[client]->height = tr.scratchImage[client]->uploadHeight = rows; - qglTextureImage2D(texture, GL_TEXTURE_2D, 0, GL_RGB8, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); - qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - qglTextureParameterf(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + qglTextureImage2DEXT(texture, GL_TEXTURE_2D, 0, GL_RGB8, cols, rows, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); + qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); + qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + qglTextureParameterfEXT(texture, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } else { if (dirty) { // otherwise, just subimage upload it so that drivers can tell we are going to be changing // it and don't try and do a texture compression - qglTextureSubImage2D(texture, GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, data); + qglTextureSubImage2DEXT(texture, GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, data); } } } @@ -974,7 +974,7 @@ const void *RB_DrawSurfs( const void *data ) { else if (tr.renderFbo == NULL && tr.renderDepthImage) { // If we're rendering directly to the screen, copy the depth to a texture - qglCopyTextureImage2D(tr.renderDepthImage->texnum, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, glConfig.vidWidth, glConfig.vidHeight, 0); + qglCopyTextureImage2DEXT(tr.renderDepthImage->texnum, GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, 0, 0, glConfig.vidWidth, glConfig.vidHeight, 0); } if (tr.hdrDepthFbo) @@ -1221,7 +1221,7 @@ const void *RB_DrawSurfs( const void *data ) { FBO_Bind(NULL); if (cubemap && cubemap->image) - qglGenerateTextureMipmap(cubemap->image->texnum, GL_TEXTURE_CUBE_MAP); + qglGenerateTextureMipmapEXT(cubemap->image->texnum, GL_TEXTURE_CUBE_MAP); } return (const void *)(cmd + 1); @@ -1478,14 +1478,14 @@ const void *RB_CapShadowMap(const void *data) { if (tr.shadowCubemaps[cmd->map]) { - qglCopyTextureImage2D(tr.shadowCubemaps[cmd->map]->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_X + cmd->cubeSide, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - ( backEnd.refdef.y + PSHADOW_MAP_SIZE ), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0); + qglCopyTextureImage2DEXT(tr.shadowCubemaps[cmd->map]->texnum, GL_TEXTURE_CUBE_MAP_POSITIVE_X + cmd->cubeSide, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - ( backEnd.refdef.y + PSHADOW_MAP_SIZE ), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0); } } else { if (tr.pshadowMaps[cmd->map]) { - qglCopyTextureImage2D(tr.pshadowMaps[cmd->map]->texnum, GL_TEXTURE_2D, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - (backEnd.refdef.y + PSHADOW_MAP_SIZE), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0); + qglCopyTextureImage2DEXT(tr.pshadowMaps[cmd->map]->texnum, GL_TEXTURE_2D, 0, GL_RGBA8, backEnd.refdef.x, glConfig.vidHeight - (backEnd.refdef.y + PSHADOW_MAP_SIZE), PSHADOW_MAP_SIZE, PSHADOW_MAP_SIZE, 0); } } } diff --git a/code/renderergl2/tr_dsa.c b/code/renderergl2/tr_dsa.c index 4ea76996..f738a5d5 100644 --- a/code/renderergl2/tr_dsa.c +++ b/code/renderergl2/tr_dsa.c @@ -43,7 +43,7 @@ void GL_BindNullTextures() { for (i = 0; i < NUM_TEXTURE_BUNDLES; i++) { - qglBindMultiTexture(GL_TEXTURE0_ARB + i, GL_TEXTURE_2D, 0); + qglBindMultiTextureEXT(GL_TEXTURE0_ARB + i, GL_TEXTURE_2D, 0); glDsaState.textures[i] = 0; } } @@ -71,12 +71,12 @@ int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) if (target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && target <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) target = GL_TEXTURE_CUBE_MAP; - qglBindMultiTexture(texunit, target, texture); + qglBindMultiTextureEXT(texunit, target, texture); glDsaState.textures[tmu] = texture; return 1; } -GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture) +GLvoid APIENTRY GLDSA_BindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture) { if (glDsaState.texunit != texunit) { @@ -87,47 +87,47 @@ GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint tex qglBindTexture(target, texture); } -GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param) +GLvoid APIENTRY GLDSA_TextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param) { GL_BindMultiTexture(glDsaState.texunit, target, texture); qglTexParameterf(target, pname, param); } -GLvoid APIENTRY GLDSA_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param) +GLvoid APIENTRY GLDSA_TextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param) { GL_BindMultiTexture(glDsaState.texunit, target, texture); qglTexParameteri(target, pname, param); } -GLvoid APIENTRY GLDSA_TextureImage2D(GLuint texture, GLenum target, GLint level, GLint internalformat, +GLvoid APIENTRY GLDSA_TextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) { GL_BindMultiTexture(glDsaState.texunit, target, texture); qglTexImage2D(target, level, internalformat, width, height, border, format, type, pixels); } -GLvoid APIENTRY GLDSA_TextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, +GLvoid APIENTRY GLDSA_TextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) { GL_BindMultiTexture(glDsaState.texunit, target, texture); qglTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); } -GLvoid APIENTRY GLDSA_CopyTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat, +GLvoid APIENTRY GLDSA_CopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { GL_BindMultiTexture(glDsaState.texunit, target, texture); qglCopyTexImage2D(target, level, internalformat, x, y, width, height, border); } -GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat, +GLvoid APIENTRY GLDSA_CompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) { GL_BindMultiTexture(glDsaState.texunit, target, texture); qglCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data); } -GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level, +GLvoid APIENTRY GLDSA_CompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) { @@ -135,7 +135,7 @@ GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, qglCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data); } -GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target) +GLvoid APIENTRY GLDSA_GenerateTextureMipmapEXT(GLuint texture, GLenum target) { GL_BindMultiTexture(glDsaState.texunit, target, texture); qglGenerateMipmapEXT(target); @@ -157,47 +157,47 @@ int GL_UseProgram(GLuint program) return 1; } -GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0) +GLvoid APIENTRY GLDSA_ProgramUniform1iEXT(GLuint program, GLint location, GLint v0) { GL_UseProgram(program); qglUniform1i(location, v0); } -GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0) +GLvoid APIENTRY GLDSA_ProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0) { GL_UseProgram(program); qglUniform1f(location, v0); } -GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniform2fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1) { GL_UseProgram(program); qglUniform2f(location, v0, v1); } -GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniform3fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) { GL_UseProgram(program); qglUniform3f(location, v0, v1, v2); } -GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniform4fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { GL_UseProgram(program); qglUniform4f(location, v0, v1, v2, v3); } -GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniform1fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value) { GL_UseProgram(program); qglUniform1fv(location, count, value); } -GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) { @@ -252,34 +252,34 @@ void GL_BindRenderbuffer(GLuint renderbuffer) } } -GLvoid APIENTRY GLDSA_NamedRenderbufferStorage(GLuint renderbuffer, +GLvoid APIENTRY GLDSA_NamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) { GL_BindRenderbuffer(renderbuffer); qglRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, internalformat, width, height); } -GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisample(GLuint renderbuffer, +GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) { GL_BindRenderbuffer(renderbuffer); qglRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, internalformat, width, height); } -GLenum APIENTRY GLDSA_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target) +GLenum APIENTRY GLDSA_CheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target) { GL_BindFramebuffer(target, framebuffer); return qglCheckFramebufferStatusEXT(target); } -GLvoid APIENTRY GLDSA_NamedFramebufferTexture2D(GLuint framebuffer, +GLvoid APIENTRY GLDSA_NamedFramebufferTexture2DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) { GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, framebuffer); qglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment, textarget, texture, level); } -GLvoid APIENTRY GLDSA_NamedFramebufferRenderbuffer(GLuint framebuffer, +GLvoid APIENTRY GLDSA_NamedFramebufferRenderbufferEXT(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) { GL_BindFramebuffer(GL_FRAMEBUFFER_EXT, framebuffer); diff --git a/code/renderergl2/tr_dsa.h b/code/renderergl2/tr_dsa.h index 5e68cafe..44f32303 100644 --- a/code/renderergl2/tr_dsa.h +++ b/code/renderergl2/tr_dsa.h @@ -26,37 +26,37 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. void GL_BindNullTextures(void); int GL_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture); -GLvoid APIENTRY GLDSA_BindMultiTexture(GLenum texunit, GLenum target, GLuint texture); -GLvoid APIENTRY GLDSA_TextureParameterf(GLuint texture, GLenum target, GLenum pname, GLfloat param); -GLvoid APIENTRY GLDSA_TextureParameteri(GLuint texture, GLenum target, GLenum pname, GLint param); -GLvoid APIENTRY GLDSA_TextureImage2D(GLuint texture, GLenum target, GLint level, GLint internalformat, +GLvoid APIENTRY GLDSA_BindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture); +GLvoid APIENTRY GLDSA_TextureParameterfEXT(GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLvoid APIENTRY GLDSA_TextureParameteriEXT(GLuint texture, GLenum target, GLenum pname, GLint param); +GLvoid APIENTRY GLDSA_TextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLvoid APIENTRY GLDSA_TextureSubImage2D(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, +GLvoid APIENTRY GLDSA_TextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLvoid APIENTRY GLDSA_CopyTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat, +GLvoid APIENTRY GLDSA_CopyTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLvoid APIENTRY GLDSA_CompressedTextureImage2D(GLuint texture, GLenum target, GLint level, GLenum internalformat, +GLvoid APIENTRY GLDSA_CompressedTextureImage2DEXT(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -GLvoid APIENTRY GLDSA_CompressedTextureSubImage2D(GLuint texture, GLenum target, GLint level, +GLvoid APIENTRY GLDSA_CompressedTextureSubImage2DEXT(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -GLvoid APIENTRY GLDSA_GenerateTextureMipmap(GLuint texture, GLenum target); +GLvoid APIENTRY GLDSA_GenerateTextureMipmapEXT(GLuint texture, GLenum target); void GL_BindNullProgram(void); int GL_UseProgram(GLuint program); -GLvoid APIENTRY GLDSA_ProgramUniform1i(GLuint program, GLint location, GLint v0); -GLvoid APIENTRY GLDSA_ProgramUniform1f(GLuint program, GLint location, GLfloat v0); -GLvoid APIENTRY GLDSA_ProgramUniform2f(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniform1iEXT(GLuint program, GLint location, GLint v0); +GLvoid APIENTRY GLDSA_ProgramUniform1fEXT(GLuint program, GLint location, GLfloat v0); +GLvoid APIENTRY GLDSA_ProgramUniform2fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLvoid APIENTRY GLDSA_ProgramUniform3f(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniform3fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLvoid APIENTRY GLDSA_ProgramUniform4f(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniform4fEXT(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLvoid APIENTRY GLDSA_ProgramUniform1fv(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniform1fvEXT(GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fv(GLuint program, GLint location, +GLvoid APIENTRY GLDSA_ProgramUniformMatrix4fvEXT(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); @@ -64,16 +64,16 @@ void GL_BindNullFramebuffers(void); void GL_BindFramebuffer(GLenum target, GLuint framebuffer); void GL_BindRenderbuffer(GLuint renderbuffer); -GLvoid APIENTRY GLDSA_NamedRenderbufferStorage(GLuint renderbuffer, +GLvoid APIENTRY GLDSA_NamedRenderbufferStorageEXT(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisample(GLuint renderbuffer, +GLvoid APIENTRY GLDSA_NamedRenderbufferStorageMultisampleEXT(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLenum APIENTRY GLDSA_CheckNamedFramebufferStatus(GLuint framebuffer, GLenum target); -GLvoid APIENTRY GLDSA_NamedFramebufferTexture2D(GLuint framebuffer, +GLenum APIENTRY GLDSA_CheckNamedFramebufferStatusEXT(GLuint framebuffer, GLenum target); +GLvoid APIENTRY GLDSA_NamedFramebufferTexture2DEXT(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLvoid APIENTRY GLDSA_NamedFramebufferRenderbuffer(GLuint framebuffer, +GLvoid APIENTRY GLDSA_NamedFramebufferRenderbufferEXT(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index 3882434c..927383af 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -43,96 +43,6 @@ QGL_ARB_vertex_array_object_PROCS; QGL_EXT_direct_state_access_PROCS; #undef GLE -// GL_EXT_framebuffer_object -GLboolean (APIENTRY * qglIsRenderbufferEXT)(GLuint renderbuffer); -void (APIENTRY * qglBindRenderbufferEXT)(GLenum target, GLuint renderbuffer); -void (APIENTRY * qglDeleteRenderbuffersEXT)(GLsizei n, const GLuint *renderbuffers); -void (APIENTRY * qglGenRenderbuffersEXT)(GLsizei n, GLuint *renderbuffers); - -void (APIENTRY * qglRenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); - -void (APIENTRY * qglGetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint *params); - -GLboolean (APIENTRY * qglIsFramebufferEXT)(GLuint framebuffer); -void (APIENTRY * qglBindFramebufferEXT)(GLenum target, GLuint framebuffer); -void (APIENTRY * qglDeleteFramebuffersEXT)(GLsizei n, const GLuint *framebuffers); -void (APIENTRY * qglGenFramebuffersEXT)(GLsizei n, GLuint *framebuffers); - -GLenum (APIENTRY * qglCheckFramebufferStatusEXT)(GLenum target); - -void (APIENTRY * qglFramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, - GLint level); -void (APIENTRY * qglFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, - GLint level); -void (APIENTRY * qglFramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, - GLint level, GLint zoffset); - -void (APIENTRY * qglFramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, - GLuint renderbuffer); - -void (APIENTRY * qglGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint *params); - -void (APIENTRY * qglGenerateMipmapEXT)(GLenum target); - -// GL_EXT_framebuffer_blit -void (APIENTRY * qglBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, - GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, - GLbitfield mask, GLenum filter); - -// GL_EXT_framebuffer_multisample -void (APIENTRY * qglRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples, - GLenum internalformat, GLsizei width, GLsizei height); - -// GL_ARB_vertex_array_object -void (APIENTRY * qglBindVertexArrayARB)(GLuint array); -void (APIENTRY * qglDeleteVertexArraysARB)(GLsizei n, const GLuint *arrays); -void (APIENTRY * qglGenVertexArraysARB)(GLsizei n, GLuint *arrays); -GLboolean (APIENTRY * qglIsVertexArrayARB)(GLuint array); - -// GL_EXT_direct_state_access -GLvoid (APIENTRY * qglBindMultiTexture)(GLenum texunit, GLenum target, GLuint texture); -GLvoid (APIENTRY * qglTextureParameterf)(GLuint texture, GLenum target, GLenum pname, GLfloat param); -GLvoid (APIENTRY * qglTextureParameteri)(GLuint texture, GLenum target, GLenum pname, GLint param); -GLvoid (APIENTRY * qglTextureImage2D)(GLuint texture, GLenum target, GLint level, GLint internalformat, - GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLvoid (APIENTRY * qglTextureSubImage2D)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLvoid (APIENTRY * qglCopyTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat, - GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLvoid (APIENTRY * qglCompressedTextureImage2D)(GLuint texture, GLenum target, GLint level, GLenum internalformat, - GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -GLvoid (APIENTRY * qglCompressedTextureSubImage2D)(GLuint texture, GLenum target, GLint level, - GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, - GLsizei imageSize, const GLvoid *data); -GLvoid (APIENTRY * qglGenerateTextureMipmap)(GLuint texture, GLenum target); - -GLvoid(APIENTRY * qglProgramUniform1i)(GLuint program, GLint location, GLint v0); -GLvoid(APIENTRY * qglProgramUniform1f)(GLuint program, GLint location, GLfloat v0); -GLvoid(APIENTRY * qglProgramUniform2f)(GLuint program, GLint location, - GLfloat v0, GLfloat v1); -GLvoid(APIENTRY * qglProgramUniform3f)(GLuint program, GLint location, - GLfloat v0, GLfloat v1, GLfloat v2); -GLvoid(APIENTRY * qglProgramUniform4f)(GLuint program, GLint location, - GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLvoid(APIENTRY * qglProgramUniform1fv)(GLuint program, GLint location, - GLsizei count, const GLfloat *value); -GLvoid(APIENTRY * qglProgramUniformMatrix4fv)(GLuint program, GLint location, - GLsizei count, GLboolean transpose, - const GLfloat *value); - -GLvoid(APIENTRY * qglNamedRenderbufferStorage)(GLuint renderbuffer, - GLenum internalformat, GLsizei width, GLsizei height); - -GLvoid(APIENTRY * qglNamedRenderbufferStorageMultisample)(GLuint renderbuffer, - GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - -GLenum(APIENTRY * qglCheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target); -GLvoid(APIENTRY * qglNamedFramebufferTexture2D)(GLuint framebuffer, - GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLvoid(APIENTRY * qglNamedFramebufferRenderbuffer)(GLuint framebuffer, - GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); - - static qboolean GLimp_HaveExtension(const char *ext) { const char *ptr = Q_stristr( glConfig.extensions_string, ext ); diff --git a/code/renderergl2/tr_fbo.c b/code/renderergl2/tr_fbo.c index 9ba63441..41cfdd72 100644 --- a/code/renderergl2/tr_fbo.c +++ b/code/renderergl2/tr_fbo.c @@ -32,7 +32,7 @@ R_CheckFBO */ qboolean R_CheckFBO(const FBO_t * fbo) { - GLenum code = qglCheckNamedFramebufferStatus(fbo->frameBuffer, GL_FRAMEBUFFER_EXT); + GLenum code = qglCheckNamedFramebufferStatusEXT(fbo->frameBuffer, GL_FRAMEBUFFER_EXT); if(code == GL_FRAMEBUFFER_COMPLETE_EXT) return qtrue; @@ -184,20 +184,20 @@ void FBO_CreateBuffer(FBO_t *fbo, int format, int index, int multisample) qglGenRenderbuffersEXT(1, pRenderBuffer); if (multisample && glRefConfig.framebufferMultisample) - qglNamedRenderbufferStorageMultisample(*pRenderBuffer, multisample, format, fbo->width, fbo->height); + qglNamedRenderbufferStorageMultisampleEXT(*pRenderBuffer, multisample, format, fbo->width, fbo->height); else - qglNamedRenderbufferStorage(*pRenderBuffer, format, fbo->width, fbo->height); + qglNamedRenderbufferStorageEXT(*pRenderBuffer, format, fbo->width, fbo->height); if(absent) { if (attachment == 0) { - qglNamedFramebufferRenderbuffer(fbo->frameBuffer, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer); - qglNamedFramebufferRenderbuffer(fbo->frameBuffer, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer); + qglNamedFramebufferRenderbufferEXT(fbo->frameBuffer, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer); + qglNamedFramebufferRenderbufferEXT(fbo->frameBuffer, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, *pRenderBuffer); } else { - qglNamedFramebufferRenderbuffer(fbo->frameBuffer, attachment, GL_RENDERBUFFER_EXT, *pRenderBuffer); + qglNamedFramebufferRenderbufferEXT(fbo->frameBuffer, attachment, GL_RENDERBUFFER_EXT, *pRenderBuffer); } } } @@ -216,7 +216,7 @@ void FBO_AttachImage(FBO_t *fbo, image_t *image, GLenum attachment, GLuint cubem if (image->flags & IMGFLAG_CUBEMAP) target = GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + cubemapside; - qglNamedFramebufferTexture2D(fbo->frameBuffer, attachment, target, image->texnum, 0); + qglNamedFramebufferTexture2DEXT(fbo->frameBuffer, attachment, target, image->texnum, 0); index = attachment - GL_COLOR_ATTACHMENT0_EXT; if (index >= 0 && index <= 15) fbo->colorImage[index] = image; diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index b9089612..50770dac 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -701,7 +701,7 @@ void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value) *compare = value; - qglProgramUniform1i(program->program, uniforms[uniformNum], value); + qglProgramUniform1iEXT(program->program, uniforms[uniformNum], value); } void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value) @@ -725,7 +725,7 @@ void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat valu *compare = value; - qglProgramUniform1f(program->program, uniforms[uniformNum], value); + qglProgramUniform1fEXT(program->program, uniforms[uniformNum], value); } void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t v) @@ -750,7 +750,7 @@ void GLSL_SetUniformVec2(shaderProgram_t *program, int uniformNum, const vec2_t compare[0] = v[0]; compare[1] = v[1]; - qglProgramUniform2f(program->program, uniforms[uniformNum], v[0], v[1]); + qglProgramUniform2fEXT(program->program, uniforms[uniformNum], v[0], v[1]); } void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t v) @@ -774,7 +774,7 @@ void GLSL_SetUniformVec3(shaderProgram_t *program, int uniformNum, const vec3_t VectorCopy(v, compare); - qglProgramUniform3f(program->program, uniforms[uniformNum], v[0], v[1], v[2]); + qglProgramUniform3fEXT(program->program, uniforms[uniformNum], v[0], v[1], v[2]); } void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t v) @@ -798,7 +798,7 @@ void GLSL_SetUniformVec4(shaderProgram_t *program, int uniformNum, const vec4_t VectorCopy4(v, compare); - qglProgramUniform4f(program->program, uniforms[uniformNum], v[0], v[1], v[2], v[3]); + qglProgramUniform4fEXT(program->program, uniforms[uniformNum], v[0], v[1], v[2], v[3]); } void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_t v) @@ -822,7 +822,7 @@ void GLSL_SetUniformFloat5(shaderProgram_t *program, int uniformNum, const vec5_ VectorCopy5(v, compare); - qglProgramUniform1fv(program->program, uniforms[uniformNum], 5, v); + qglProgramUniform1fvEXT(program->program, uniforms[uniformNum], 5, v); } void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t matrix) @@ -846,7 +846,7 @@ void GLSL_SetUniformMat4(shaderProgram_t *program, int uniformNum, const mat4_t Mat4Copy(matrix, compare); - qglProgramUniformMatrix4fv(program->program, uniforms[uniformNum], 1, GL_FALSE, matrix); + qglProgramUniformMatrix4fvEXT(program->program, uniforms[uniformNum], 1, GL_FALSE, matrix); } void GLSL_DeleteGPUShader(shaderProgram_t *program) diff --git a/code/renderergl2/tr_image.c b/code/renderergl2/tr_image.c index f2670699..95989b93 100644 --- a/code/renderergl2/tr_image.c +++ b/code/renderergl2/tr_image.c @@ -116,8 +116,8 @@ void GL_TextureMode( const char *string ) { for ( i = 0 ; i < tr.numImages ; i++ ) { glt = tr.images[ i ]; if ( glt->flags & IMGFLAG_MIPMAP && !(glt->flags & IMGFLAG_CUBEMAP)) { - qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); - qglTextureParameterf(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); + qglTextureParameterfEXT(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, gl_filter_min); + qglTextureParameterfEXT(glt->texnum, GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, gl_filter_max); } } } @@ -1858,7 +1858,7 @@ static void RawImage_UploadToRgtc2Texture(GLuint texture, byte *data, int width, } } - qglCompressedTextureImage2D(texture, GL_TEXTURE_2D, mip, GL_COMPRESSED_RG_RGTC2, width, height, 0, size, compressedData); + qglCompressedTextureImage2DEXT(texture, GL_TEXTURE_2D, mip, GL_COMPRESSED_RG_RGTC2, width, height, 0, size, compressedData); ri.Hunk_FreeTempMemory(compressedData); } @@ -1938,7 +1938,7 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int do { lastMip = (width == 1 && height == 1) || !mipmap; - qglTextureImage2D(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, NULL); + qglTextureImage2DEXT(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, NULL); width = MAX(1, width >> 1); height = MAX(1, height >> 1); @@ -1971,9 +1971,9 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int if (compressed) { if (subtexture) - qglCompressedTextureSubImage2D(texture, target, miplevel, x, y, width, height, picFormat, size, data); + qglCompressedTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, picFormat, size, data); else - qglCompressedTextureImage2D(texture, target, miplevel, picFormat, width, height, 0, size, data); + qglCompressedTextureImage2DEXT(texture, target, miplevel, picFormat, width, height, 0, size, data); } else { @@ -1983,9 +1983,9 @@ static void RawImage_UploadTexture(GLuint texture, byte *data, int x, int y, int if (rgtc) RawImage_UploadToRgtc2Texture(texture, data, width, height, miplevel); else if (subtexture) - qglTextureSubImage2D(texture, target, miplevel, x, y, width, height, dataFormat, dataType, data); + qglTextureSubImage2DEXT(texture, target, miplevel, x, y, width, height, dataFormat, dataType, data); else - qglTextureImage2D(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data); + qglTextureImage2DEXT(texture, target, miplevel, internalFormat, width, height, 0, dataFormat, dataType, data); if (!lastMip && numMips < 2) { @@ -2112,19 +2112,19 @@ done: if (mipmap) { if (textureFilterAnisotropic && !cubemap) - qglTextureParameteri(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, + qglTextureParameteriEXT(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, (GLint)Com_Clamp(1, maxAnisotropy, r_ext_max_anisotropy->integer)); - qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, gl_filter_min); - qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, gl_filter_max); + qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, gl_filter_min); + qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, gl_filter_max); } else { if (textureFilterAnisotropic && !cubemap) - qglTextureParameteri(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1); + qglTextureParameteriEXT(image->texnum, textureTarget, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1); - qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } // Fix for sampling depth buffer on old nVidia cards @@ -2135,9 +2135,9 @@ done: case GL_DEPTH_COMPONENT16_ARB: case GL_DEPTH_COMPONENT24_ARB: case GL_DEPTH_COMPONENT32_ARB: - qglTextureParameterf(image->texnum, textureTarget, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); - qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - qglTextureParameterf(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + qglTextureParameterfEXT(image->texnum, textureTarget, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE); + qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + qglTextureParameterfEXT(image->texnum, textureTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); break; default: break; @@ -2199,14 +2199,14 @@ image_t *R_CreateImage2( const char *name, byte *pic, int width, int height, GLe if (image->flags & IMGFLAG_CUBEMAP) { - qglTextureParameterf(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, glWrapClampMode); - qglTextureParameterf(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, glWrapClampMode); - qglTextureParameteri(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, glWrapClampMode); + qglTextureParameterfEXT(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, glWrapClampMode); + qglTextureParameterfEXT(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, glWrapClampMode); + qglTextureParameteriEXT(image->texnum, GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, glWrapClampMode); } else { - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode); - qglTextureParameterf(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode); + qglTextureParameterfEXT(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, glWrapClampMode); + qglTextureParameterfEXT(image->texnum, GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, glWrapClampMode); } hash = generateHashValue(name); @@ -2819,8 +2819,8 @@ void R_CreateBuiltinImages( void ) { for ( x = 0; x < 4; x++) { tr.sunShadowDepthImage[x] = R_CreateImage(va("*sunshadowdepth%i", x), NULL, r_shadowMapSize->integer, r_shadowMapSize->integer, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_DEPTH_COMPONENT24_ARB); - qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); - qglTextureParameterf(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); + qglTextureParameterfEXT(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE); + qglTextureParameterfEXT(tr.sunShadowDepthImage[x]->texnum, GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); } tr.screenShadowImage = R_CreateImage("*screenShadow", NULL, width, height, IMGTYPE_COLORALPHA, IMGFLAG_NO_COMPRESSION | IMGFLAG_CLAMPTOEDGE, GL_RGBA8); From 29ac1171544bdbb5c61956f672753e7059c62a35 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Fri, 29 Jul 2016 01:53:50 -0700 Subject: [PATCH 147/480] OpenGL2: Let unlit materials use parallax maps. --- code/renderergl2/tr_glsl.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index 50770dac..d2bfbda2 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -1004,9 +1004,6 @@ void GLSL_InitGPUShaders(void) if ((i & LIGHTDEF_USE_PARALLAXMAP) && !r_parallaxMapping->integer) continue; - if (!lightType && (i & LIGHTDEF_USE_PARALLAXMAP)) - continue; - if (!lightType && (i & LIGHTDEF_USE_SHADOWMAP)) continue; From 5252e28163fd0f4cb5dcc0bc073962a87a121cde Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 4 Aug 2016 20:16:22 -0700 Subject: [PATCH 148/480] OpenGL2: Fix shader error logs. --- code/renderergl2/tr_glsl.c | 95 +++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 42 deletions(-) diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index d2bfbda2..f9349422 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -148,8 +148,15 @@ static uniformInfo_t uniformsInfo[] = { "u_CubeMapInfo", GLSL_VEC4 }, }; +typedef enum +{ + GLSL_PRINTLOG_PROGRAM_INFO, + GLSL_PRINTLOG_SHADER_INFO, + GLSL_PRINTLOG_SHADER_SOURCE +} +glslPrintLog_t; -static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly) +static void GLSL_PrintLog(GLuint programOrShader, glslPrintLog_t type, qboolean developerOnly) { char *msg; static char msgPart[1024]; @@ -157,61 +164,70 @@ static void GLSL_PrintInfoLog(GLuint program, qboolean developerOnly) int i; int printLevel = developerOnly ? PRINT_DEVELOPER : PRINT_ALL; - qglGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength); + switch (type) + { + case GLSL_PRINTLOG_PROGRAM_INFO: + ri.Printf(printLevel, "Program info log:\n"); + qglGetProgramiv(programOrShader, GL_INFO_LOG_LENGTH, &maxLength); + break; + + case GLSL_PRINTLOG_SHADER_INFO: + ri.Printf(printLevel, "Shader info log:\n"); + qglGetShaderiv(programOrShader, GL_INFO_LOG_LENGTH, &maxLength); + break; + + case GLSL_PRINTLOG_SHADER_SOURCE: + ri.Printf(printLevel, "Shader source:\n"); + qglGetShaderiv(programOrShader, GL_SHADER_SOURCE_LENGTH, &maxLength); + break; + } if (maxLength <= 0) { - ri.Printf(printLevel, "No compile log.\n"); + ri.Printf(printLevel, "None.\n"); return; } - ri.Printf(printLevel, "compile log:\n"); + if (maxLength < 1023) + msg = msgPart; + else + msg = ri.Malloc(maxLength); + + switch (type) + { + case GLSL_PRINTLOG_PROGRAM_INFO: + qglGetProgramInfoLog(programOrShader, maxLength, &maxLength, msg); + break; + + case GLSL_PRINTLOG_SHADER_INFO: + qglGetShaderInfoLog(programOrShader, maxLength, &maxLength, msg); + break; + + case GLSL_PRINTLOG_SHADER_SOURCE: + qglGetShaderSource(programOrShader, maxLength, &maxLength, msg); + break; + } if (maxLength < 1023) { - qglGetProgramInfoLog(program, maxLength, &maxLength, msgPart); - msgPart[maxLength + 1] = '\0'; ri.Printf(printLevel, "%s\n", msgPart); } else { - msg = ri.Malloc(maxLength); - - qglGetProgramInfoLog(program, maxLength, &maxLength, msg); - - for(i = 0; i < maxLength; i += 1024) + for(i = 0; i < maxLength; i += 1023) { Q_strncpyz(msgPart, msg + i, sizeof(msgPart)); - ri.Printf(printLevel, "%s\n", msgPart); + ri.Printf(printLevel, "%s", msgPart); } + ri.Printf(printLevel, "\n"); + ri.Free(msg); } -} -static void GLSL_PrintShaderSource(GLuint shader) -{ - char *msg; - static char msgPart[1024]; - int maxLength = 0; - int i; - - qglGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &maxLength); - - msg = ri.Malloc(maxLength); - - qglShaderSource(shader, 1, (const GLchar **)&msg, &maxLength); - - for(i = 0; i < maxLength; i += 1024) - { - Q_strncpyz(msgPart, msg + i, sizeof(msgPart)); - ri.Printf(PRINT_ALL, "%s\n", msgPart); - } - - ri.Free(msg); } static void GLSL_GetShaderHeader( GLenum shaderType, const GLchar *extra, char *dest, int size ) @@ -365,15 +381,12 @@ static int GLSL_CompileGPUShader(GLuint program, GLuint *prevShader, const GLcha qglGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); if(!compiled) { - GLSL_PrintShaderSource(shader); - GLSL_PrintInfoLog(shader, qfalse); + GLSL_PrintLog(shader, GLSL_PRINTLOG_SHADER_SOURCE, qfalse); + GLSL_PrintLog(shader, GLSL_PRINTLOG_SHADER_INFO, qfalse); ri.Error(ERR_DROP, "Couldn't compile shader"); return 0; } - //GLSL_PrintInfoLog(shader, qtrue); - //GLSL_PrintShaderSource(shader); - if (*prevShader) { qglDetachShader(program, *prevShader); @@ -460,8 +473,7 @@ static void GLSL_LinkProgram(GLuint program) qglGetProgramiv(program, GL_LINK_STATUS, &linked); if(!linked) { - GLSL_PrintInfoLog(program, qfalse); - ri.Printf(PRINT_ALL, "\n"); + GLSL_PrintLog(program, GLSL_PRINTLOG_PROGRAM_INFO, qfalse); ri.Error(ERR_DROP, "shaders failed to link"); } } @@ -475,8 +487,7 @@ static void GLSL_ValidateProgram(GLuint program) qglGetProgramiv(program, GL_VALIDATE_STATUS, &validated); if(!validated) { - GLSL_PrintInfoLog(program, qfalse); - ri.Printf(PRINT_ALL, "\n"); + GLSL_PrintLog(program, GLSL_PRINTLOG_PROGRAM_INFO, qfalse); ri.Error(ERR_DROP, "shaders failed to validate"); } } From 1972128927d14daf035e6eeb93797b2cb10c0531 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 4 Aug 2016 21:31:26 -0700 Subject: [PATCH 149/480] Better defaults for joystick axes. These changed from SDL1->SDL2 afaict. --- code/client/cl_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/client/cl_main.c b/code/client/cl_main.c index 0c7142c3..145fbfd3 100644 --- a/code/client/cl_main.c +++ b/code/client/cl_main.c @@ -3582,13 +3582,13 @@ void CL_Init( void ) { j_yaw = Cvar_Get ("j_yaw", "-0.022", CVAR_ARCHIVE); j_forward = Cvar_Get ("j_forward", "-0.25", CVAR_ARCHIVE); j_side = Cvar_Get ("j_side", "0.25", CVAR_ARCHIVE); - j_up = Cvar_Get ("j_up", "1", CVAR_ARCHIVE); + j_up = Cvar_Get ("j_up", "0", CVAR_ARCHIVE); j_pitch_axis = Cvar_Get ("j_pitch_axis", "3", CVAR_ARCHIVE); - j_yaw_axis = Cvar_Get ("j_yaw_axis", "4", CVAR_ARCHIVE); + j_yaw_axis = Cvar_Get ("j_yaw_axis", "2", CVAR_ARCHIVE); j_forward_axis = Cvar_Get ("j_forward_axis", "1", CVAR_ARCHIVE); j_side_axis = Cvar_Get ("j_side_axis", "0", CVAR_ARCHIVE); - j_up_axis = Cvar_Get ("j_up_axis", "2", CVAR_ARCHIVE); + j_up_axis = Cvar_Get ("j_up_axis", "4", CVAR_ARCHIVE); Cvar_CheckRange(j_pitch_axis, 0, MAX_JOYSTICK_AXIS-1, qtrue); Cvar_CheckRange(j_yaw_axis, 0, MAX_JOYSTICK_AXIS-1, qtrue); From d09866861e816caed1710c5c4f7bc4197d52da92 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 4 Aug 2016 21:32:35 -0700 Subject: [PATCH 150/480] Controller hot plug support. --- code/sdl/sdl_input.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 90ad596c..1af20ec2 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -434,15 +434,15 @@ static void IN_InitJoystick( void ) stick = NULL; memset(&stick_state, '\0', sizeof (stick_state)); - if (!SDL_WasInit(SDL_INIT_JOYSTICK)) + if (!SDL_WasInit(SDL_INIT_GAMECONTROLLER)) { - Com_DPrintf("Calling SDL_Init(SDL_INIT_JOYSTICK)...\n"); - if (SDL_Init(SDL_INIT_JOYSTICK) != 0) + Com_DPrintf("Calling SDL_Init(SDL_INIT_GAMECONTROLLER)...\n"); + if (SDL_Init(SDL_INIT_GAMECONTROLLER) != 0) { - Com_DPrintf("SDL_Init(SDL_INIT_JOYSTICK) failed: %s\n", SDL_GetError()); + Com_DPrintf("SDL_Init(SDL_INIT_GAMECONTROLLER) failed: %s\n", SDL_GetError()); return; } - Com_DPrintf("SDL_Init(SDL_INIT_JOYSTICK) passed.\n"); + Com_DPrintf("SDL_Init(SDL_INIT_GAMECONTROLLER) passed.\n"); } total = SDL_NumJoysticks(); @@ -459,7 +459,7 @@ static void IN_InitJoystick( void ) if( !in_joystick->integer ) { Com_DPrintf( "Joystick is not active.\n" ); - SDL_QuitSubSystem(SDL_INIT_JOYSTICK); + SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER); return; } @@ -494,7 +494,7 @@ IN_ShutdownJoystick */ static void IN_ShutdownJoystick( void ) { - if ( !SDL_WasInit( SDL_INIT_JOYSTICK ) ) + if ( !SDL_WasInit( SDL_INIT_GAMECONTROLLER ) ) return; if (stick) @@ -503,7 +503,7 @@ static void IN_ShutdownJoystick( void ) stick = NULL; } - SDL_QuitSubSystem(SDL_INIT_JOYSTICK); + SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER); } /* @@ -840,6 +840,11 @@ static void IN_ProcessEvents( void ) } break; + case SDL_CONTROLLERDEVICEADDED: + case SDL_CONTROLLERDEVICEREMOVED: + IN_InitJoystick(); + break; + case SDL_QUIT: Cbuf_ExecuteText(EXEC_NOW, "quit Closed window\n"); break; From 879fb555a50a94a723291aaea68dda389a0361c2 Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Thu, 4 Aug 2016 21:05:33 -1000 Subject: [PATCH 151/480] Minor updates to README.md Removed some language about the old mailing list, pointed to forums, and more accurately to the wiki, updated reference to SDL. Zardoz speaks to you, His chosen ones. --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3e004ad8..f7594120 100644 --- a/README.md +++ b/README.md @@ -36,11 +36,15 @@ use a modern copy from http://icculus.org/gtkradiant/. The original id software readme that accompanied the Q3 source release has been renamed to id-readme.txt so as to prevent confusion. Please refer to the -web-site for updated status. +website for updated status. -More documentation is on: +More documentation including a Player's Guide and Sysadmin Guide is on: http://wiki.ioquake3.org/ +If you've got issues that you aren't sure are worth filing as bugs, or just +want to chat, please visit our forums: +http://discourse.ioquake.org + # Compilation and installation For *nix @@ -481,6 +485,7 @@ The focus for ioq3 is to develop a stable base suitable for further development and provide players with the same Quake 3 experience they've had for years. We do have graphical improvements with the new renderer, but they are off by default. +See opengl2-readme.md for more information. # Building Official Installers @@ -503,13 +508,11 @@ but we have some general guidelines: providing pak0.pk3 and the patch pk3s are not referred to or included in the installer. - * Please include at least an SDL so/dylib/dll on every platform. + * Please include at least a libSDL2 so/dylib/dll on every platform. * Please include an OpenAL so/dylib/dll, since every platform should be using it by now. - * Please contact the mailing list when you've made your installer. - * Please be prepared to alter your installer on the whim of the maintainers. * Your installer will be mirrored to an "official" directory, thus making it From b7f2ebd477dde6c094bff1a04be366668a069745 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 8 Aug 2016 02:36:10 -0700 Subject: [PATCH 152/480] Better gamepad support. --- code/client/cl_input.c | 24 +++-- code/client/cl_keys.c | 27 +++++ code/client/keycodes.h | 30 ++++++ code/sdl/sdl_input.c | 222 ++++++++++++++++++++++++++++++++++++++++- 4 files changed, 293 insertions(+), 10 deletions(-) diff --git a/code/client/cl_input.c b/code/client/cl_input.c index 296a7cc0..f4089d7e 100644 --- a/code/client/cl_input.c +++ b/code/client/cl_input.c @@ -392,6 +392,12 @@ CL_JoystickMove void CL_JoystickMove( usercmd_t *cmd ) { float anglespeed; + float yaw = j_yaw->value * cl.joystickAxis[j_yaw_axis->integer]; + float right = j_side->value * cl.joystickAxis[j_side_axis->integer]; + float forward = j_forward->value * cl.joystickAxis[j_forward_axis->integer]; + float pitch = j_pitch->value * cl.joystickAxis[j_pitch_axis->integer]; + float up = j_up->value * cl.joystickAxis[j_up_axis->integer]; + if ( !(in_speed.active ^ cl_run->integer) ) { cmd->buttons |= BUTTON_WALKING; } @@ -403,22 +409,22 @@ void CL_JoystickMove( usercmd_t *cmd ) { } if ( !in_strafe.active ) { - cl.viewangles[YAW] += anglespeed * j_yaw->value * cl.joystickAxis[j_yaw_axis->integer]; - cmd->rightmove = ClampChar( cmd->rightmove + (int) (j_side->value * cl.joystickAxis[j_side_axis->integer]) ); + cl.viewangles[YAW] += anglespeed * yaw; + cmd->rightmove = ClampChar( cmd->rightmove + (int)right ); } else { - cl.viewangles[YAW] += anglespeed * j_side->value * cl.joystickAxis[j_side_axis->integer]; - cmd->rightmove = ClampChar( cmd->rightmove + (int) (j_yaw->value * cl.joystickAxis[j_yaw_axis->integer]) ); + cl.viewangles[YAW] += anglespeed * right; + cmd->rightmove = ClampChar( cmd->rightmove + (int)yaw ); } if ( in_mlooking ) { - cl.viewangles[PITCH] += anglespeed * j_forward->value * cl.joystickAxis[j_forward_axis->integer]; - cmd->forwardmove = ClampChar( cmd->forwardmove + (int) (j_pitch->value * cl.joystickAxis[j_pitch_axis->integer]) ); + cl.viewangles[PITCH] += anglespeed * forward; + cmd->forwardmove = ClampChar( cmd->forwardmove + (int)pitch ); } else { - cl.viewangles[PITCH] += anglespeed * j_pitch->value * cl.joystickAxis[j_pitch_axis->integer]; - cmd->forwardmove = ClampChar( cmd->forwardmove + (int) (j_forward->value * cl.joystickAxis[j_forward_axis->integer]) ); + cl.viewangles[PITCH] += anglespeed * pitch; + cmd->forwardmove = ClampChar( cmd->forwardmove + (int)forward ); } - cmd->upmove = ClampChar( cmd->upmove + (int) (j_up->value * cl.joystickAxis[j_up_axis->integer]) ); + cmd->upmove = ClampChar( cmd->upmove + (int)up ); } /* diff --git a/code/client/cl_keys.c b/code/client/cl_keys.c index a6173ddf..f73083a5 100644 --- a/code/client/cl_keys.c +++ b/code/client/cl_keys.c @@ -289,6 +289,33 @@ keyname_t keynames[] = {"EURO", K_EURO}, {"UNDO", K_UNDO}, + {"PAD0_A", K_PAD0_A }, + {"PAD0_B", K_PAD0_B }, + {"PAD0_X", K_PAD0_X }, + {"PAD0_Y", K_PAD0_Y }, + {"PAD0_BACK", K_PAD0_BACK }, + {"PAD0_GUIDE", K_PAD0_GUIDE }, + {"PAD0_START", K_PAD0_START }, + {"PAD0_LEFTSTICK_CLICK", K_PAD0_LEFTSTICK_CLICK }, + {"PAD0_RIGHTSTICK_CLICK", K_PAD0_RIGHTSTICK_CLICK }, + {"PAD0_LEFTSHOULDER", K_PAD0_LEFTSHOULDER }, + {"PAD0_RIGHTSHOULDER", K_PAD0_RIGHTSHOULDER }, + {"PAD0_DPAD_UP", K_PAD0_DPAD_UP }, + {"PAD0_DPAD_DOWN", K_PAD0_DPAD_DOWN }, + {"PAD0_DPAD_LEFT", K_PAD0_DPAD_LEFT }, + {"PAD0_DPAD_RIGHT", K_PAD0_DPAD_RIGHT }, + + {"PAD0_LEFTSTICK_LEFT", K_PAD0_LEFTSTICK_LEFT }, + {"PAD0_LEFTSTICK_RIGHT", K_PAD0_LEFTSTICK_RIGHT }, + {"PAD0_LEFTSTICK_UP", K_PAD0_LEFTSTICK_UP }, + {"PAD0_LEFTSTICK_DOWN", K_PAD0_LEFTSTICK_DOWN }, + {"PAD0_RIGHTSTICK_LEFT", K_PAD0_RIGHTSTICK_LEFT }, + {"PAD0_RIGHTSTICK_RIGHT", K_PAD0_RIGHTSTICK_RIGHT }, + {"PAD0_RIGHTSTICK_UP", K_PAD0_RIGHTSTICK_UP }, + {"PAD0_RIGHTSTICK_DOWN", K_PAD0_RIGHTSTICK_DOWN }, + {"PAD0_LEFTTRIGGER", K_PAD0_LEFTTRIGGER }, + {"PAD0_RIGHTTRIGGER", K_PAD0_RIGHTTRIGGER }, + {NULL,0} }; diff --git a/code/client/keycodes.h b/code/client/keycodes.h index 706ca1b0..e813368c 100644 --- a/code/client/keycodes.h +++ b/code/client/keycodes.h @@ -260,6 +260,36 @@ typedef enum { K_EURO, K_UNDO, + // Gamepad controls + // Ordered to match SDL2 game controller buttons and axes + // Do not change this order without also changing IN_GamepadMove() in SDL_input.c + K_PAD0_A, + K_PAD0_B, + K_PAD0_X, + K_PAD0_Y, + K_PAD0_BACK, + K_PAD0_GUIDE, + K_PAD0_START, + K_PAD0_LEFTSTICK_CLICK, + K_PAD0_RIGHTSTICK_CLICK, + K_PAD0_LEFTSHOULDER, + K_PAD0_RIGHTSHOULDER, + K_PAD0_DPAD_UP, + K_PAD0_DPAD_DOWN, + K_PAD0_DPAD_LEFT, + K_PAD0_DPAD_RIGHT, + + K_PAD0_LEFTSTICK_LEFT, + K_PAD0_LEFTSTICK_RIGHT, + K_PAD0_LEFTSTICK_UP, + K_PAD0_LEFTSTICK_DOWN, + K_PAD0_RIGHTSTICK_LEFT, + K_PAD0_RIGHTSTICK_RIGHT, + K_PAD0_RIGHTSTICK_UP, + K_PAD0_RIGHTSTICK_DOWN, + K_PAD0_LEFTTRIGGER, + K_PAD0_RIGHTTRIGGER, + // Pseudo-key that brings the console down K_CONSOLE, diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 1af20ec2..4744e0e9 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -35,6 +35,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA static cvar_t *in_keyboardDebug = NULL; +static SDL_GameController *gamepad = NULL; static SDL_Joystick *stick = NULL; static qboolean mouseAvailable = qfalse; @@ -410,7 +411,7 @@ static int hat_keys[16] = { struct { - qboolean buttons[16]; // !!! FIXME: these might be too many. + qboolean buttons[SDL_CONTROLLER_BUTTON_MAX + 1]; // +1 because old max was 16, current SDL_CONTROLLER_BUTTON_MAX is 15 unsigned int oldaxes; int oldaaxes[MAX_JOYSTICK_AXIS]; unsigned int oldhats; @@ -428,10 +429,14 @@ static void IN_InitJoystick( void ) int total = 0; char buf[16384] = ""; + if (gamepad) + SDL_GameControllerClose(gamepad); + if (stick != NULL) SDL_JoystickClose(stick); stick = NULL; + gamepad = NULL; memset(&stick_state, '\0', sizeof (stick_state)); if (!SDL_WasInit(SDL_INIT_GAMECONTROLLER)) @@ -476,6 +481,9 @@ static void IN_InitJoystick( void ) return; } + if (SDL_IsGameController(in_joystickNo->integer)) + gamepad = SDL_GameControllerOpen(in_joystickNo->integer); + Com_DPrintf( "Joystick %d opened\n", in_joystickNo->integer ); Com_DPrintf( "Name: %s\n", SDL_JoystickNameForIndex(in_joystickNo->integer) ); Com_DPrintf( "Axes: %d\n", SDL_JoystickNumAxes(stick) ); @@ -483,8 +491,10 @@ static void IN_InitJoystick( void ) Com_DPrintf( "Buttons: %d\n", SDL_JoystickNumButtons(stick) ); Com_DPrintf( "Balls: %d\n", SDL_JoystickNumBalls(stick) ); Com_DPrintf( "Use Analog: %s\n", in_joystickUseAnalog->integer ? "Yes" : "No" ); + Com_DPrintf( "Is gamepad: %s\n", gamepad ? "Yes" : "No" ); SDL_JoystickEventState(SDL_QUERY); + SDL_GameControllerEventState(SDL_QUERY); } /* @@ -497,6 +507,12 @@ static void IN_ShutdownJoystick( void ) if ( !SDL_WasInit( SDL_INIT_GAMECONTROLLER ) ) return; + if (gamepad) + { + SDL_GameControllerClose(gamepad); + gamepad = NULL; + } + if (stick) { SDL_JoystickClose(stick); @@ -506,6 +522,204 @@ static void IN_ShutdownJoystick( void ) SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER); } + +static qboolean KeyToAxisAndSign(int keynum, int *outAxis, int *outSign) +{ + char *bind; + + if (!keynum) + return qfalse; + + bind = Key_GetBinding(keynum); + + if (!bind || *bind != '+') + return qfalse; + + *outSign = 0; + + if (stricmp(bind, "+forward") == 0) + { + *outAxis = j_forward_axis->integer; + *outSign = j_forward->value > 0.0f ? 1 : -1; + } + else if (stricmp(bind, "+back") == 0) + { + *outAxis = j_forward_axis->integer; + *outSign = j_forward->value > 0.0f ? -1 : 1; + } + else if (stricmp(bind, "+moveleft") == 0) + { + *outAxis = j_side_axis->integer; + *outSign = j_side->value > 0.0f ? -1 : 1; + } + else if (stricmp(bind, "+moveright") == 0) + { + *outAxis = j_side_axis->integer; + *outSign = j_side->value > 0.0f ? 1 : -1; + } + else if (stricmp(bind, "+lookup") == 0) + { + *outAxis = j_pitch_axis->integer; + *outSign = j_pitch->value > 0.0f ? -1 : 1; + } + else if (stricmp(bind, "+lookdown") == 0) + { + *outAxis = j_pitch_axis->integer; + *outSign = j_pitch->value > 0.0f ? 1 : -1; + } + else if (stricmp(bind, "+left") == 0) + { + *outAxis = j_yaw_axis->integer; + *outSign = j_yaw->value > 0.0f ? 1 : -1; + } + else if (stricmp(bind, "+right") == 0) + { + *outAxis = j_yaw_axis->integer; + *outSign = j_yaw->value > 0.0f ? -1 : 1; + } + else if (stricmp(bind, "+moveup") == 0) + { + *outAxis = j_up_axis->integer; + *outSign = j_up->value > 0.0f ? 1 : -1; + } + else if (stricmp(bind, "+movedown") == 0) + { + *outAxis = j_up_axis->integer; + *outSign = j_up->value > 0.0f ? -1 : 1; + } + + return *outSign != 0; +} + +/* +=============== +IN_GamepadMove +=============== +*/ +static void IN_GamepadMove( void ) +{ + int i; + int translatedAxes[MAX_JOYSTICK_AXIS]; + qboolean translatedAxesSet[MAX_JOYSTICK_AXIS]; + + SDL_GameControllerUpdate(); + + // check buttons + for (i = 0; i < SDL_CONTROLLER_BUTTON_MAX; i++) + { + qboolean pressed = SDL_GameControllerGetButton(gamepad, SDL_CONTROLLER_BUTTON_A + i); + if (pressed != stick_state.buttons[i]) + { + Com_QueueEvent(0, SE_KEY, K_PAD0_A + i, pressed, 0, NULL); + stick_state.buttons[i] = pressed; + } + } + + // must defer translated axes until all real axes are processed + // must be done this way to prevent a later mapped axis from zeroing out a previous one + if (in_joystickUseAnalog->integer) + { + for (i = 0; i < MAX_JOYSTICK_AXIS; i++) + { + translatedAxes[i] = 0; + translatedAxesSet[i] = qfalse; + } + } + + // check axes + for (i = 0; i < SDL_CONTROLLER_AXIS_MAX; i++) + { + int axis = SDL_GameControllerGetAxis(gamepad, SDL_CONTROLLER_AXIS_LEFTX + i); + int oldAxis = stick_state.oldaaxes[i]; + + // Smoothly ramp from dead zone to maximum value + float f = ((float)abs(axis) / 32767.0f - in_joystickThreshold->value) / (1.0f - in_joystickThreshold->value); + + if (f < 0.0f) + f = 0.0f; + + axis = (int)(32767 * ((axis < 0) ? -f : f)); + + if (axis != oldAxis) + { + const int negMap[SDL_CONTROLLER_AXIS_MAX] = { K_PAD0_LEFTSTICK_LEFT, K_PAD0_LEFTSTICK_UP, K_PAD0_RIGHTSTICK_LEFT, K_PAD0_RIGHTSTICK_UP, 0, 0 }; + const int posMap[SDL_CONTROLLER_AXIS_MAX] = { K_PAD0_LEFTSTICK_RIGHT, K_PAD0_LEFTSTICK_DOWN, K_PAD0_RIGHTSTICK_RIGHT, K_PAD0_RIGHTSTICK_DOWN, K_PAD0_LEFTTRIGGER, K_PAD0_RIGHTTRIGGER }; + + qboolean posAnalog = qfalse, negAnalog = qfalse; + int negKey = negMap[i]; + int posKey = posMap[i]; + + if (in_joystickUseAnalog->integer) + { + int posAxis = 0, posSign = 0, negAxis = 0, negSign = 0; + + // get axes and axes signs for keys if available + posAnalog = KeyToAxisAndSign(posKey, &posAxis, &posSign); + negAnalog = KeyToAxisAndSign(negKey, &negAxis, &negSign); + + // positive to negative/neutral -> keyup if axis hasn't yet been set + if (posAnalog && !translatedAxesSet[posAxis] && oldAxis > 0 && axis <= 0) + { + translatedAxes[posAxis] = 0; + translatedAxesSet[posAxis] = qtrue; + } + + // negative to positive/neutral -> keyup if axis hasn't yet been set + if (negAnalog && !translatedAxesSet[negAxis] && oldAxis < 0 && axis >= 0) + { + translatedAxes[negAxis] = 0; + translatedAxesSet[negAxis] = qtrue; + } + + // negative/neutral to positive -> keydown + if (posAnalog && axis > 0) + { + translatedAxes[posAxis] = axis * posSign; + translatedAxesSet[posAxis] = qtrue; + } + + // positive/neutral to negative -> keydown + if (negAnalog && axis < 0) + { + translatedAxes[negAxis] = -axis * negSign; + translatedAxesSet[negAxis] = qtrue; + } + } + + // keyups first so they get overridden by keydowns later + + // positive to negative/neutral -> keyup + if (!posAnalog && posKey && oldAxis > 0 && axis <= 0) + Com_QueueEvent(0, SE_KEY, posKey, qfalse, 0, NULL); + + // negative to positive/neutral -> keyup + if (!negAnalog && negKey && oldAxis < 0 && axis >= 0) + Com_QueueEvent(0, SE_KEY, negKey, qfalse, 0, NULL); + + // negative/neutral to positive -> keydown + if (!posAnalog && posKey && oldAxis <= 0 && axis > 0) + Com_QueueEvent(0, SE_KEY, posKey, qtrue, 0, NULL); + + // positive/neutral to negative -> keydown + if (!negAnalog && negKey && oldAxis >= 0 && axis < 0) + Com_QueueEvent(0, SE_KEY, negKey, qtrue, 0, NULL); + + stick_state.oldaaxes[i] = axis; + } + } + + // set translated axes + if (in_joystickUseAnalog->integer) + { + for (i = 0; i < MAX_JOYSTICK_AXIS; i++) + { + if (translatedAxesSet[i]) + Com_QueueEvent(0, SE_JOYSTICK_AXIS, i, translatedAxes[i], 0, NULL); + } + } +} + + /* =============== IN_JoyMove @@ -518,6 +732,12 @@ static void IN_JoyMove( void ) int total = 0; int i = 0; + if (gamepad) + { + IN_GamepadMove(); + return; + } + if (!stick) return; From 6262972488a80657f5ef837c20b079799be7a731 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Mon, 8 Aug 2016 02:43:02 -0700 Subject: [PATCH 153/480] Fix stricmp usage in previous commit. --- code/sdl/sdl_input.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 4744e0e9..802af4dd 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -537,52 +537,52 @@ static qboolean KeyToAxisAndSign(int keynum, int *outAxis, int *outSign) *outSign = 0; - if (stricmp(bind, "+forward") == 0) + if (Q_stricmp(bind, "+forward") == 0) { *outAxis = j_forward_axis->integer; *outSign = j_forward->value > 0.0f ? 1 : -1; } - else if (stricmp(bind, "+back") == 0) + else if (Q_stricmp(bind, "+back") == 0) { *outAxis = j_forward_axis->integer; *outSign = j_forward->value > 0.0f ? -1 : 1; } - else if (stricmp(bind, "+moveleft") == 0) + else if (Q_stricmp(bind, "+moveleft") == 0) { *outAxis = j_side_axis->integer; *outSign = j_side->value > 0.0f ? -1 : 1; } - else if (stricmp(bind, "+moveright") == 0) + else if (Q_stricmp(bind, "+moveright") == 0) { *outAxis = j_side_axis->integer; *outSign = j_side->value > 0.0f ? 1 : -1; } - else if (stricmp(bind, "+lookup") == 0) + else if (Q_stricmp(bind, "+lookup") == 0) { *outAxis = j_pitch_axis->integer; *outSign = j_pitch->value > 0.0f ? -1 : 1; } - else if (stricmp(bind, "+lookdown") == 0) + else if (Q_stricmp(bind, "+lookdown") == 0) { *outAxis = j_pitch_axis->integer; *outSign = j_pitch->value > 0.0f ? 1 : -1; } - else if (stricmp(bind, "+left") == 0) + else if (Q_stricmp(bind, "+left") == 0) { *outAxis = j_yaw_axis->integer; *outSign = j_yaw->value > 0.0f ? 1 : -1; } - else if (stricmp(bind, "+right") == 0) + else if (Q_stricmp(bind, "+right") == 0) { *outAxis = j_yaw_axis->integer; *outSign = j_yaw->value > 0.0f ? -1 : 1; } - else if (stricmp(bind, "+moveup") == 0) + else if (Q_stricmp(bind, "+moveup") == 0) { *outAxis = j_up_axis->integer; *outSign = j_up->value > 0.0f ? 1 : -1; } - else if (stricmp(bind, "+movedown") == 0) + else if (Q_stricmp(bind, "+movedown") == 0) { *outAxis = j_up_axis->integer; *outSign = j_up->value > 0.0f ? -1 : 1; From f47aaa2a61c7f8100eee77e83ee17fb3bc3003af Mon Sep 17 00:00:00 2001 From: "Zachary J. Slater" Date: Sun, 7 Aug 2016 23:53:38 -1000 Subject: [PATCH 154/480] Minor URL change. --- misc/linux/server_compile.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/linux/server_compile.sh b/misc/linux/server_compile.sh index ed78be92..66bdc652 100644 --- a/misc/linux/server_compile.sh +++ b/misc/linux/server_compile.sh @@ -14,7 +14,7 @@ echo "This process requires you to have the following installed through your dis git and all of the ioquake3 dependencies necessary for an ioquake3 server. If you do not have the necessary dependencies this script will bail out. - Please post a message to http://community.ioquake.org/ asking for help and include whatever error messages you received during the compile phase. + Please post a message to http://discourse.ioquake.org/ asking for help and include whatever error messages you received during the compile phase. Please edit this script. Inside you will find a COPYDIR variable you can alter to change where ioquake3 will be installed to." while true; do read -p "Are you ready to compile ioquake3 in the $IOQ3LOCAL directory, and have it installed into $COPYDIR? " yn From 1cf0b21cda562bade9152958f1525e5ac281ab9c Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Thu, 11 Aug 2016 00:46:43 -0700 Subject: [PATCH 155/480] Fix black screen when in_joystick disabled but controller connected. --- code/sdl/sdl_input.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/sdl/sdl_input.c b/code/sdl/sdl_input.c index 802af4dd..d0ebebce 100644 --- a/code/sdl/sdl_input.c +++ b/code/sdl/sdl_input.c @@ -1062,7 +1062,8 @@ static void IN_ProcessEvents( void ) case SDL_CONTROLLERDEVICEADDED: case SDL_CONTROLLERDEVICEREMOVED: - IN_InitJoystick(); + if (in_joystick->integer) + IN_InitJoystick(); break; case SDL_QUIT: From fe8ac838e22af82f664bb49e35e96cb786029bf1 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Sun, 14 Aug 2016 22:22:20 -0700 Subject: [PATCH 156/480] OpenGL2: Preallocate grid surfaces like other BSP surfaces. --- code/renderergl2/tr_bsp.c | 81 +++++++++++++++++-------------------- code/renderergl2/tr_curve.c | 66 +++++++++++------------------- code/renderergl2/tr_local.h | 6 +-- 3 files changed, 65 insertions(+), 88 deletions(-) diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index 2feeddb7..47333b2c 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -822,7 +822,7 @@ ParseMesh =============== */ static void ParseMesh ( dsurface_t *ds, drawVert_t *verts, float *hdrVertColors, msurface_t *surf ) { - srfBspSurface_t *grid; + srfBspSurface_t *grid = (srfBspSurface_t *)surf->data; int i, j; int width, height, numPoints; srfVert_t points[MAX_PATCH_SIZE*MAX_PATCH_SIZE]; @@ -903,8 +903,7 @@ static void ParseMesh ( dsurface_t *ds, drawVert_t *verts, float *hdrVertColors, } // pre-tesseleate - grid = R_SubdividePatchToGrid( width, height, points ); - surf->data = (surfaceType_t *)grid; + R_SubdividePatchToGrid( grid, width, height, points ); // copy the level of detail origin, which is the center // of the group of all curves that must subdivide the same @@ -917,6 +916,12 @@ static void ParseMesh ( dsurface_t *ds, drawVert_t *verts, float *hdrVertColors, VectorScale( bounds[1], 0.5f, grid->lodOrigin ); VectorSubtract( bounds[0], grid->lodOrigin, tmpVec ); grid->lodRadius = VectorLength( tmpVec ); + + surf->cullinfo.type = CULLINFO_BOX | CULLINFO_SPHERE; + VectorCopy(grid->cullBounds[0], surf->cullinfo.bounds[0]); + VectorCopy(grid->cullBounds[1], surf->cullinfo.bounds[1]); + VectorCopy(grid->cullOrigin, surf->cullinfo.localOrigin); + surf->cullinfo.radius = grid->cullRadius; } /* @@ -1077,6 +1082,8 @@ static void ParseFlare( dsurface_t *ds, drawVert_t *verts, msurface_t *surf, int flare->color[i] = LittleFloat( ds->lightmapVecs[0][i] ); flare->normal[i] = LittleFloat( ds->lightmapVecs[2][i] ); } + + surf->cullinfo = CULLINFO_NONE; } @@ -1321,7 +1328,7 @@ int R_StitchPatches( int grid1num, int grid2num ) { // insert column into grid2 right after after column l if (m) row = grid2->height-1; else row = 0; - grid2 = R_GridInsertColumn( grid2, l+1, row, + R_GridInsertColumn( grid2, l+1, row, grid1->verts[k + 1 + offset1].xyz, grid1->widthLodError[k+1]); grid2->lodStitched = qfalse; s_worldData.surfaces[grid2num].data = (void *) grid2; @@ -1365,7 +1372,7 @@ int R_StitchPatches( int grid1num, int grid2num ) { // insert row into grid2 right after after row l if (m) column = grid2->width-1; else column = 0; - grid2 = R_GridInsertRow( grid2, l+1, column, + R_GridInsertRow( grid2, l+1, column, grid1->verts[k + 1 + offset1].xyz, grid1->widthLodError[k+1]); grid2->lodStitched = qfalse; s_worldData.surfaces[grid2num].data = (void *) grid2; @@ -1418,7 +1425,7 @@ int R_StitchPatches( int grid1num, int grid2num ) { // insert column into grid2 right after after column l if (m) row = grid2->height-1; else row = 0; - grid2 = R_GridInsertColumn( grid2, l+1, row, + R_GridInsertColumn( grid2, l+1, row, grid1->verts[grid1->width * (k + 1) + offset1].xyz, grid1->heightLodError[k+1]); grid2->lodStitched = qfalse; s_worldData.surfaces[grid2num].data = (void *) grid2; @@ -1462,7 +1469,7 @@ int R_StitchPatches( int grid1num, int grid2num ) { // insert row into grid2 right after after row l if (m) column = grid2->width-1; else column = 0; - grid2 = R_GridInsertRow( grid2, l+1, column, + R_GridInsertRow( grid2, l+1, column, grid1->verts[grid1->width * (k + 1) + offset1].xyz, grid1->heightLodError[k+1]); grid2->lodStitched = qfalse; s_worldData.surfaces[grid2num].data = (void *) grid2; @@ -1516,7 +1523,7 @@ int R_StitchPatches( int grid1num, int grid2num ) { // insert column into grid2 right after after column l if (m) row = grid2->height-1; else row = 0; - grid2 = R_GridInsertColumn( grid2, l+1, row, + R_GridInsertColumn( grid2, l+1, row, grid1->verts[k - 1 + offset1].xyz, grid1->widthLodError[k+1]); grid2->lodStitched = qfalse; s_worldData.surfaces[grid2num].data = (void *) grid2; @@ -1560,7 +1567,7 @@ int R_StitchPatches( int grid1num, int grid2num ) { // insert row into grid2 right after after row l if (m) column = grid2->width-1; else column = 0; - grid2 = R_GridInsertRow( grid2, l+1, column, + R_GridInsertRow( grid2, l+1, column, grid1->verts[k - 1 + offset1].xyz, grid1->widthLodError[k+1]); if (!grid2) break; @@ -1615,7 +1622,7 @@ int R_StitchPatches( int grid1num, int grid2num ) { // insert column into grid2 right after after column l if (m) row = grid2->height-1; else row = 0; - grid2 = R_GridInsertColumn( grid2, l+1, row, + R_GridInsertColumn( grid2, l+1, row, grid1->verts[grid1->width * (k - 1) + offset1].xyz, grid1->heightLodError[k+1]); grid2->lodStitched = qfalse; s_worldData.surfaces[grid2num].data = (void *) grid2; @@ -1659,7 +1666,7 @@ int R_StitchPatches( int grid1num, int grid2num ) { // insert row into grid2 right after after row l if (m) column = grid2->width-1; else column = 0; - grid2 = R_GridInsertRow( grid2, l+1, column, + R_GridInsertRow( grid2, l+1, column, grid1->verts[grid1->width * (k - 1) + offset1].xyz, grid1->heightLodError[k+1]); grid2->lodStitched = qfalse; s_worldData.surfaces[grid2num].data = (void *) grid2; @@ -1749,37 +1756,37 @@ R_MovePatchSurfacesToHunk =============== */ void R_MovePatchSurfacesToHunk(void) { - int i, size; - srfBspSurface_t *grid, *hunkgrid; + int i; + srfBspSurface_t *grid; for ( i = 0; i < s_worldData.numsurfaces; i++ ) { + void *copyFrom; // grid = (srfBspSurface_t *) s_worldData.surfaces[i].data; // if this surface is not a grid if ( grid->surfaceType != SF_GRID ) continue; // - size = sizeof(*grid); - hunkgrid = ri.Hunk_Alloc(size, h_low); - Com_Memcpy(hunkgrid, grid, size); - hunkgrid->widthLodError = ri.Hunk_Alloc( grid->width * 4, h_low ); - Com_Memcpy( hunkgrid->widthLodError, grid->widthLodError, grid->width * 4 ); + copyFrom = grid->widthLodError; + grid->widthLodError = ri.Hunk_Alloc( grid->width * 4, h_low ); + Com_Memcpy(grid->widthLodError, copyFrom, grid->width * 4); + ri.Free(copyFrom); - hunkgrid->heightLodError = ri.Hunk_Alloc( grid->height * 4, h_low ); - Com_Memcpy( hunkgrid->heightLodError, grid->heightLodError, grid->height * 4 ); + copyFrom = grid->heightLodError; + grid->heightLodError = ri.Hunk_Alloc(grid->height * 4, h_low); + Com_Memcpy(grid->heightLodError, copyFrom, grid->height * 4); + ri.Free(copyFrom); - hunkgrid->numIndexes = grid->numIndexes; - hunkgrid->indexes = ri.Hunk_Alloc(grid->numIndexes * sizeof(glIndex_t), h_low); - Com_Memcpy(hunkgrid->indexes, grid->indexes, grid->numIndexes * sizeof(glIndex_t)); + copyFrom = grid->indexes; + grid->indexes = ri.Hunk_Alloc(grid->numIndexes * sizeof(glIndex_t), h_low); + Com_Memcpy(grid->indexes, copyFrom, grid->numIndexes * sizeof(glIndex_t)); + ri.Free(copyFrom); - hunkgrid->numVerts = grid->numVerts; - hunkgrid->verts = ri.Hunk_Alloc(grid->numVerts * sizeof(srfVert_t), h_low); - Com_Memcpy(hunkgrid->verts, grid->verts, grid->numVerts * sizeof(srfVert_t)); - - R_FreeSurfaceGridMesh( grid ); - - s_worldData.surfaces[i].data = (void *) hunkgrid; + copyFrom = grid->verts; + grid->verts = ri.Hunk_Alloc(grid->numVerts * sizeof(srfVert_t), h_low); + Com_Memcpy(grid->verts, copyFrom, grid->numVerts * sizeof(srfVert_t)); + ri.Free(copyFrom); } } @@ -2276,7 +2283,7 @@ static void R_LoadSurfaces( lump_t *surfs, lump_t *verts, lump_t *indexLump ) { for ( i = 0 ; i < count ; i++, in++, out++ ) { switch ( LittleLong( in->surfaceType ) ) { case MST_PATCH: - // FIXME: do this + out->data = ri.Hunk_Alloc( sizeof(srfBspSurface_t), h_low); break; case MST_TRIANGLE_SOUP: out->data = ri.Hunk_Alloc( sizeof(srfBspSurface_t), h_low); @@ -2298,15 +2305,6 @@ static void R_LoadSurfaces( lump_t *surfs, lump_t *verts, lump_t *indexLump ) { switch ( LittleLong( in->surfaceType ) ) { case MST_PATCH: ParseMesh ( in, dv, hdrVertColors, out ); - { - srfBspSurface_t *surface = (srfBspSurface_t *)out->data; - - out->cullinfo.type = CULLINFO_BOX | CULLINFO_SPHERE; - VectorCopy(surface->cullBounds[0], out->cullinfo.bounds[0]); - VectorCopy(surface->cullBounds[1], out->cullinfo.bounds[1]); - VectorCopy(surface->cullOrigin, out->cullinfo.localOrigin); - out->cullinfo.radius = surface->cullRadius; - } numMeshes++; break; case MST_TRIANGLE_SOUP: @@ -2319,9 +2317,6 @@ static void R_LoadSurfaces( lump_t *surfs, lump_t *verts, lump_t *indexLump ) { break; case MST_FLARE: ParseFlare( in, dv, out, indexes ); - { - out->cullinfo.type = CULLINFO_NONE; - } numFlares++; break; default: diff --git a/code/renderergl2/tr_curve.c b/code/renderergl2/tr_curve.c index 91c80a4d..f9e17cd4 100644 --- a/code/renderergl2/tr_curve.c +++ b/code/renderergl2/tr_curve.c @@ -254,14 +254,11 @@ static void MakeMeshTangentVectors(int width, int height, srfVert_t ctrl[MAX_GRI #endif -static int MakeMeshIndexes(int width, int height, srfVert_t ctrl[MAX_GRID_SIZE][MAX_GRID_SIZE], - glIndex_t indexes[(MAX_GRID_SIZE-1)*(MAX_GRID_SIZE-1)*2*3]) +static int MakeMeshIndexes(int width, int height, glIndex_t indexes[(MAX_GRID_SIZE-1)*(MAX_GRID_SIZE-1)*2*3]) { int i, j; int numIndexes; int w, h; - srfVert_t *dv; - static srfVert_t ctrl2[MAX_GRID_SIZE * MAX_GRID_SIZE]; h = height - 1; w = width - 1; @@ -288,16 +285,6 @@ static int MakeMeshIndexes(int width, int height, srfVert_t ctrl[MAX_GRID_SIZE][ } } - // FIXME: use more elegant way - for(i = 0; i < width; i++) - { - for(j = 0; j < height; j++) - { - dv = &ctrl2[j * width + i]; - *dv = ctrl[j][i]; - } - } - return numIndexes; } @@ -375,21 +362,17 @@ static void PutPointsOnCurve( srfVert_t ctrl[MAX_GRID_SIZE][MAX_GRID_SIZE], R_CreateSurfaceGridMesh ================= */ -srfBspSurface_t *R_CreateSurfaceGridMesh(int width, int height, +void R_CreateSurfaceGridMesh(srfBspSurface_t *grid, int width, int height, srfVert_t ctrl[MAX_GRID_SIZE][MAX_GRID_SIZE], float errorTable[2][MAX_GRID_SIZE], int numIndexes, glIndex_t indexes[(MAX_GRID_SIZE-1)*(MAX_GRID_SIZE-1)*2*3]) { - int i, j, size; + int i, j; srfVert_t *vert; vec3_t tmpVec; - srfBspSurface_t *grid; // copy the results out to a grid - size = (width * height - 1) * sizeof( srfVert_t ) + sizeof( *grid ); + Com_Memset(grid, 0, sizeof(*grid)); #ifdef PATCH_STITCHING - grid = /*ri.Hunk_Alloc*/ ri.Malloc( size ); - Com_Memset(grid, 0, size); - grid->widthLodError = /*ri.Hunk_Alloc*/ ri.Malloc( width * 4 ); Com_Memcpy( grid->widthLodError, errorTable[0], width * 4 ); @@ -403,9 +386,6 @@ srfBspSurface_t *R_CreateSurfaceGridMesh(int width, int height, grid->numVerts = (width * height); grid->verts = ri.Malloc(grid->numVerts * sizeof(srfVert_t)); #else - grid = ri.Hunk_Alloc( size ); - Com_Memset(grid, 0, size); - grid->widthLodError = ri.Hunk_Alloc( width * 4 ); Com_Memcpy( grid->widthLodError, errorTable[0], width * 4 ); @@ -441,7 +421,6 @@ srfBspSurface_t *R_CreateSurfaceGridMesh(int width, int height, VectorCopy( grid->cullOrigin, grid->lodOrigin ); grid->lodRadius = grid->cullRadius; // - return grid; } /* @@ -449,12 +428,11 @@ srfBspSurface_t *R_CreateSurfaceGridMesh(int width, int height, R_FreeSurfaceGridMesh ================= */ -void R_FreeSurfaceGridMesh( srfBspSurface_t *grid ) { +void R_FreeSurfaceGridMeshData( srfBspSurface_t *grid ) { ri.Free(grid->widthLodError); ri.Free(grid->heightLodError); ri.Free(grid->indexes); ri.Free(grid->verts); - ri.Free(grid); } /* @@ -462,7 +440,7 @@ void R_FreeSurfaceGridMesh( srfBspSurface_t *grid ) { R_SubdividePatchToGrid ================= */ -srfBspSurface_t *R_SubdividePatchToGrid( int width, int height, +void R_SubdividePatchToGrid( srfBspSurface_t *grid, int width, int height, srfVert_t points[MAX_PATCH_SIZE*MAX_PATCH_SIZE] ) { int i, j, k, l; srfVert_t_cleared( prev ); @@ -629,7 +607,7 @@ srfBspSurface_t *R_SubdividePatchToGrid( int width, int height, #endif // calculate indexes - numIndexes = MakeMeshIndexes(width, height, ctrl, indexes); + numIndexes = MakeMeshIndexes(width, height, indexes); // calculate normals MakeMeshNormals( width, height, ctrl ); @@ -637,7 +615,7 @@ srfBspSurface_t *R_SubdividePatchToGrid( int width, int height, MakeMeshTangentVectors(width, height, ctrl, numIndexes, indexes); #endif - return R_CreateSurfaceGridMesh(width, height, ctrl, errorTable, numIndexes, indexes); + R_CreateSurfaceGridMesh(grid, width, height, ctrl, errorTable, numIndexes, indexes); } /* @@ -645,7 +623,7 @@ srfBspSurface_t *R_SubdividePatchToGrid( int width, int height, R_GridInsertColumn =============== */ -srfBspSurface_t *R_GridInsertColumn( srfBspSurface_t *grid, int column, int row, vec3_t point, float loderror ) { +void R_GridInsertColumn( srfBspSurface_t *grid, int column, int row, vec3_t point, float loderror ) { int i, j; int width, height, oldwidth; srfVert_t ctrl[MAX_GRID_SIZE][MAX_GRID_SIZE]; @@ -658,7 +636,7 @@ srfBspSurface_t *R_GridInsertColumn( srfBspSurface_t *grid, int column, int row, oldwidth = 0; width = grid->width + 1; if (width > MAX_GRID_SIZE) - return NULL; + return; height = grid->height; for (i = 0; i < width; i++) { if (i == column) { @@ -684,20 +662,22 @@ srfBspSurface_t *R_GridInsertColumn( srfBspSurface_t *grid, int column, int row, //PutPointsOnCurve( ctrl, width, height ); // calculate indexes - numIndexes = MakeMeshIndexes(width, height, ctrl, indexes); + numIndexes = MakeMeshIndexes(width, height, indexes); // calculate normals MakeMeshNormals( width, height, ctrl ); +#ifdef USE_VERT_TANGENT_SPACE + MakeMeshTangentVectors(width, height, ctrl, numIndexes, indexes); +#endif VectorCopy(grid->lodOrigin, lodOrigin); lodRadius = grid->lodRadius; // free the old grid - R_FreeSurfaceGridMesh(grid); + R_FreeSurfaceGridMeshData(grid); // create a new grid - grid = R_CreateSurfaceGridMesh(width, height, ctrl, errorTable, numIndexes, indexes); + R_CreateSurfaceGridMesh(grid, width, height, ctrl, errorTable, numIndexes, indexes); grid->lodRadius = lodRadius; VectorCopy(lodOrigin, grid->lodOrigin); - return grid; } /* @@ -705,7 +685,7 @@ srfBspSurface_t *R_GridInsertColumn( srfBspSurface_t *grid, int column, int row, R_GridInsertRow =============== */ -srfBspSurface_t *R_GridInsertRow( srfBspSurface_t *grid, int row, int column, vec3_t point, float loderror ) { +void R_GridInsertRow( srfBspSurface_t *grid, int row, int column, vec3_t point, float loderror ) { int i, j; int width, height, oldheight; srfVert_t ctrl[MAX_GRID_SIZE][MAX_GRID_SIZE]; @@ -719,7 +699,7 @@ srfBspSurface_t *R_GridInsertRow( srfBspSurface_t *grid, int row, int column, ve width = grid->width; height = grid->height + 1; if (height > MAX_GRID_SIZE) - return NULL; + return; for (i = 0; i < height; i++) { if (i == row) { //insert new row @@ -744,18 +724,20 @@ srfBspSurface_t *R_GridInsertRow( srfBspSurface_t *grid, int row, int column, ve //PutPointsOnCurve( ctrl, width, height ); // calculate indexes - numIndexes = MakeMeshIndexes(width, height, ctrl, indexes); + numIndexes = MakeMeshIndexes(width, height, indexes); // calculate normals MakeMeshNormals( width, height, ctrl ); +#ifdef USE_VERT_TANGENT_SPACE + MakeMeshTangentVectors(width, height, ctrl, numIndexes, indexes); +#endif VectorCopy(grid->lodOrigin, lodOrigin); lodRadius = grid->lodRadius; // free the old grid - R_FreeSurfaceGridMesh(grid); + R_FreeSurfaceGridMeshData(grid); // create a new grid - grid = R_CreateSurfaceGridMesh(width, height, ctrl, errorTable, numIndexes, indexes); + R_CreateSurfaceGridMesh(grid, width, height, ctrl, errorTable, numIndexes, indexes); grid->lodRadius = lodRadius; VectorCopy(lodOrigin, grid->lodOrigin); - return grid; } diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index e81f854b..553fcc08 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -2152,10 +2152,10 @@ CURVE TESSELATION #define PATCH_STITCHING -srfBspSurface_t *R_SubdividePatchToGrid( int width, int height, +void R_SubdividePatchToGrid( srfBspSurface_t *grid, int width, int height, srfVert_t points[MAX_PATCH_SIZE*MAX_PATCH_SIZE] ); -srfBspSurface_t *R_GridInsertColumn( srfBspSurface_t *grid, int column, int row, vec3_t point, float loderror ); -srfBspSurface_t *R_GridInsertRow( srfBspSurface_t *grid, int row, int column, vec3_t point, float loderror ); +void R_GridInsertColumn( srfBspSurface_t *grid, int column, int row, vec3_t point, float loderror ); +void R_GridInsertRow( srfBspSurface_t *grid, int row, int column, vec3_t point, float loderror ); void R_FreeSurfaceGridMesh( srfBspSurface_t *grid ); /* From 4ce600f5ac048b85e4d3dd94db6687de06e15469 Mon Sep 17 00:00:00 2001 From: SmileTheory Date: Sun, 14 Aug 2016 22:22:20 -0700 Subject: [PATCH 157/480] Missing bit of previous commit. --- code/renderergl2/tr_bsp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index 47333b2c..6abfd25f 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -1083,7 +1083,7 @@ static void ParseFlare( dsurface_t *ds, drawVert_t *verts, msurface_t *surf, int flare->normal[i] = LittleFloat( ds->lightmapVecs[2][i] ); } - surf->cullinfo = CULLINFO_NONE; + surf->cullinfo.type = CULLINFO_NONE; } From 4f9310dfa4a52740d30a08c305f114619654c7b8 Mon Sep 17 00:00:00 2001 From: MAN-AT-ARMS Date: Mon, 15 Aug 2016 22:20:00 -0400 Subject: [PATCH 158/480] Update SDL2 to 2.0.4 --- code/SDL2/include/SDL.h | 47 +- code/SDL2/include/SDL_assert.h | 45 +- code/SDL2/include/SDL_atomic.h | 12 +- code/SDL2/include/SDL_audio.h | 109 +- code/SDL2/include/SDL_bits.h | 2 +- code/SDL2/include/SDL_blendmode.h | 4 +- code/SDL2/include/SDL_clipboard.h | 2 +- code/SDL2/include/SDL_config.h | 2 +- code/SDL2/include/SDL_config.h.cmake | 46 +- code/SDL2/include/SDL_config.h.in | 32 +- code/SDL2/include/SDL_config_android.h | 13 +- code/SDL2/include/SDL_config_iphoneos.h | 19 +- code/SDL2/include/SDL_config_macosx.h | 6 +- code/SDL2/include/SDL_config_minimal.h | 2 +- code/SDL2/include/SDL_config_pandora.h | 5 +- code/SDL2/include/SDL_config_psp.h | 5 +- code/SDL2/include/SDL_config_windows.h | 13 +- code/SDL2/include/SDL_config_winrt.h | 42 +- code/SDL2/include/SDL_config_wiz.h | 6 +- code/SDL2/include/SDL_copying.h | 2 +- code/SDL2/include/SDL_cpuinfo.h | 7 +- code/SDL2/include/SDL_egl.h | 1909 ++- code/SDL2/include/SDL_endian.h | 6 +- code/SDL2/include/SDL_error.h | 4 +- code/SDL2/include/SDL_events.h | 43 +- code/SDL2/include/SDL_filesystem.h | 4 +- code/SDL2/include/SDL_gamecontroller.h | 17 +- code/SDL2/include/SDL_gesture.h | 2 +- code/SDL2/include/SDL_haptic.h | 34 +- code/SDL2/include/SDL_hints.h | 228 +- code/SDL2/include/SDL_joystick.h | 30 +- code/SDL2/include/SDL_keyboard.h | 2 +- code/SDL2/include/SDL_keycode.h | 2 +- code/SDL2/include/SDL_loadso.h | 2 +- code/SDL2/include/SDL_log.h | 18 +- code/SDL2/include/SDL_main.h | 20 +- code/SDL2/include/SDL_messagebox.h | 2 +- code/SDL2/include/SDL_mouse.h | 78 +- code/SDL2/include/SDL_mutex.h | 2 +- code/SDL2/include/SDL_name.h | 2 +- code/SDL2/include/SDL_opengl.h | 13058 +++------------- code/SDL2/include/SDL_opengl_glext.h | 11177 +++++++++++++ code/SDL2/include/SDL_opengles.h | 2 +- code/SDL2/include/SDL_opengles2.h | 2756 +--- code/SDL2/include/SDL_opengles2_gl2.h | 621 + code/SDL2/include/SDL_opengles2_gl2ext.h | 2050 +++ code/SDL2/include/SDL_opengles2_gl2platform.h | 30 + code/SDL2/include/SDL_opengles2_khrplatform.h | 282 + code/SDL2/include/SDL_pixels.h | 33 +- code/SDL2/include/SDL_platform.h | 27 +- code/SDL2/include/SDL_power.h | 2 +- code/SDL2/include/SDL_quit.h | 2 +- code/SDL2/include/SDL_rect.h | 12 +- code/SDL2/include/SDL_render.h | 26 +- code/SDL2/include/SDL_revision.h | 4 +- code/SDL2/include/SDL_rwops.h | 5 +- code/SDL2/include/SDL_scancode.h | 2 +- code/SDL2/include/SDL_shape.h | 2 +- code/SDL2/include/SDL_stdinc.h | 156 +- code/SDL2/include/SDL_surface.h | 2 +- code/SDL2/include/SDL_system.h | 55 +- code/SDL2/include/SDL_syswm.h | 47 +- code/SDL2/include/SDL_test.h | 4 +- code/SDL2/include/SDL_test_assert.h | 10 +- code/SDL2/include/SDL_test_common.h | 2 +- code/SDL2/include/SDL_test_compare.h | 6 +- code/SDL2/include/SDL_test_crc32.h | 26 +- code/SDL2/include/SDL_test_font.h | 2 +- code/SDL2/include/SDL_test_fuzzer.h | 6 +- code/SDL2/include/SDL_test_harness.h | 2 +- code/SDL2/include/SDL_test_images.h | 2 +- code/SDL2/include/SDL_test_log.h | 6 +- code/SDL2/include/SDL_test_md5.h | 20 +- code/SDL2/include/SDL_test_random.h | 2 +- code/SDL2/include/SDL_thread.h | 6 +- code/SDL2/include/SDL_timer.h | 4 +- code/SDL2/include/SDL_touch.h | 2 +- code/SDL2/include/SDL_types.h | 2 +- code/SDL2/include/SDL_version.h | 4 +- code/SDL2/include/SDL_video.h | 168 +- code/SDL2/include/begin_code.h | 12 +- code/SDL2/include/close_code.h | 2 +- code/SDL2/include/doxyfile | 1555 -- code/libs/macosx/libSDL2-2.0.0.dylib | Bin 4509204 -> 3939940 bytes code/libs/macosx/libSDL2main.a | Bin 10892 -> 8516 bytes code/libs/win32/SDL2.dll | Bin 4618565 -> 4797982 bytes code/libs/win32/libSDL2.dll.a | Bin 344564 -> 356240 bytes code/libs/win32/libSDL2main.a | Bin 7558 -> 8808 bytes code/libs/win64/SDL264.dll | Bin 6170550 -> 6573422 bytes code/libs/win64/libSDL264.dll.a | Bin 337996 -> 349446 bytes code/libs/win64/libSDL264main.a | Bin 9108 -> 11074 bytes 91 files changed, 18549 insertions(+), 16471 deletions(-) create mode 100644 code/SDL2/include/SDL_opengl_glext.h create mode 100644 code/SDL2/include/SDL_opengles2_gl2.h create mode 100644 code/SDL2/include/SDL_opengles2_gl2ext.h create mode 100644 code/SDL2/include/SDL_opengles2_gl2platform.h create mode 100644 code/SDL2/include/SDL_opengles2_khrplatform.h delete mode 100644 code/SDL2/include/doxyfile diff --git a/code/SDL2/include/SDL.h b/code/SDL2/include/SDL.h index a9077095..7647b511 100644 --- a/code/SDL2/include/SDL.h +++ b/code/SDL2/include/SDL.h @@ -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 @@ -25,41 +25,6 @@ * Main include header for the SDL library */ -/** - * \mainpage Simple DirectMedia Layer (SDL) - * - * http://www.libsdl.org/ - * - * \section intro_sec Introduction - * - * Simple DirectMedia Layer is a cross-platform development library designed - * to provide low level access to audio, keyboard, mouse, joystick, and - * graphics 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 - * - * Enjoy! - * Sam Lantinga (slouken@libsdl.org) - */ #ifndef _SDL_H #define _SDL_H @@ -114,7 +79,7 @@ extern "C" { #define SDL_INIT_HAPTIC 0x00001000 #define SDL_INIT_GAMECONTROLLER 0x00002000 /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ #define SDL_INIT_EVENTS 0x00004000 -#define SDL_INIT_NOPARACHUTE 0x00100000 /**< Don't catch fatal signals */ +#define SDL_INIT_NOPARACHUTE 0x00100000 /**< compatibility; this flag is ignored. */ #define SDL_INIT_EVERYTHING ( \ SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \ @@ -123,13 +88,17 @@ extern "C" { /** * This function initializes the subsystems specified by \c flags - * Unless the ::SDL_INIT_NOPARACHUTE flag is set, it will install cleanup - * signal handlers for some commonly ignored fatal signals (like SIGSEGV). */ extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); /** * This function initializes specific SDL subsystems + * + * Subsystem initialization is ref-counted, you must call + * SDL_QuitSubSystem for each SDL_InitSubSystem to correctly + * shutdown a subsystem manually (or call SDL_Quit to force shutdown). + * If a subsystem is already loaded then this call will + * increase the ref-count and return. */ extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); diff --git a/code/SDL2/include/SDL_assert.h b/code/SDL2/include/SDL_assert.h index 42348f7d..402981f9 100644 --- a/code/SDL2/include/SDL_assert.h +++ b/code/SDL2/include/SDL_assert.h @@ -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 @@ -51,7 +51,7 @@ assert can have unique static variables associated with it. /* Don't include intrin.h here because it contains C++ code */ extern void __cdecl __debugbreak(void); #define SDL_TriggerBreakpoint() __debugbreak() -#elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) +#elif (!defined(__NACL__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) #elif defined(HAVE_SIGNAL_H) #include @@ -86,8 +86,10 @@ This also solves the problem of... disable assertions. */ +/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking + this condition isn't constant. And looks like an owl's face! */ #ifdef _MSC_VER /* stupid /W4 warnings. */ -#define SDL_NULL_WHILE_LOOP_CONDITION (-1 == __LINE__) +#define SDL_NULL_WHILE_LOOP_CONDITION (0,0) #else #define SDL_NULL_WHILE_LOOP_CONDITION (0) #endif @@ -102,9 +104,9 @@ typedef enum SDL_ASSERTION_ABORT, /**< Terminate the program. */ SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ -} SDL_assert_state; +} SDL_AssertState; -typedef struct SDL_assert_data +typedef struct SDL_AssertData { int always_ignore; unsigned int trigger_count; @@ -112,13 +114,13 @@ typedef struct SDL_assert_data const char *filename; int linenum; const char *function; - const struct SDL_assert_data *next; -} SDL_assert_data; + const struct SDL_AssertData *next; +} SDL_AssertData; #if (SDL_ASSERT_LEVEL > 0) /* Never call this directly. Use the SDL_assert* macros. */ -extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *, +extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, const char *, const char *, int) #if defined(__clang__) @@ -141,16 +143,13 @@ extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *, #define SDL_enabled_assert(condition) \ do { \ while ( !(condition) ) { \ - static struct SDL_assert_data assert_data = { \ + static struct SDL_AssertData sdl_assert_data = { \ 0, 0, #condition, 0, 0, 0, 0 \ }; \ - const SDL_assert_state state = SDL_ReportAssertion(&assert_data, \ - SDL_FUNCTION, \ - SDL_FILE, \ - SDL_LINE); \ - if (state == SDL_ASSERTION_RETRY) { \ + const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ + if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ continue; /* go again. */ \ - } else if (state == SDL_ASSERTION_BREAK) { \ + } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ SDL_TriggerBreakpoint(); \ } \ break; /* not retrying. */ \ @@ -184,8 +183,8 @@ extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *, #define SDL_assert_always(condition) SDL_enabled_assert(condition) -typedef SDL_assert_state (SDLCALL *SDL_AssertionHandler)( - const SDL_assert_data* data, void* userdata); +typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( + const SDL_AssertData* data, void* userdata); /** * \brief Set an application-defined assertion handler. @@ -202,7 +201,7 @@ typedef SDL_assert_state (SDLCALL *SDL_AssertionHandler)( * * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! * - * \return SDL_assert_state value of how to handle the assertion failure. + * \return SDL_AssertState value of how to handle the assertion failure. * * \param handler Callback function, called when an assertion fails. * \param userdata A pointer passed to the callback as-is. @@ -249,7 +248,7 @@ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puse * The proper way to examine this data looks something like this: * * - * const SDL_assert_data *item = SDL_GetAssertionReport(); + * const SDL_AssertData *item = SDL_GetAssertionReport(); * while (item) { * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", * item->condition, item->function, item->filename, @@ -262,7 +261,7 @@ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puse * \return List of all assertions. * \sa SDL_ResetAssertionReport */ -extern DECLSPEC const SDL_assert_data * SDLCALL SDL_GetAssertionReport(void); +extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void); /** * \brief Reset the list of all assertion failures. @@ -273,6 +272,12 @@ extern DECLSPEC const SDL_assert_data * SDLCALL SDL_GetAssertionReport(void); */ extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); + +/* these had wrong naming conventions until 2.0.4. Please update your app! */ +#define SDL_assert_state SDL_AssertState +#define SDL_assert_data SDL_AssertData + + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/code/SDL2/include/SDL_atomic.h b/code/SDL2/include/SDL_atomic.h index bb3a9b65..56aa81df 100644 --- a/code/SDL2/include/SDL_atomic.h +++ b/code/SDL2/include/SDL_atomic.h @@ -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 @@ -122,7 +122,8 @@ extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); void _ReadWriteBarrier(void); #pragma intrinsic(_ReadWriteBarrier) #define SDL_CompilerBarrier() _ReadWriteBarrier() -#elif defined(__GNUC__) +#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ #define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") #else #define SDL_CompilerBarrier() \ @@ -169,10 +170,17 @@ extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquire(); #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory") #endif /* __GNUC__ && __arm__ */ #else +#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */ +#include +#define SDL_MemoryBarrierRelease() __machine_rel_barrier() +#define SDL_MemoryBarrierAcquire() __machine_acq_barrier() +#else /* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ #define SDL_MemoryBarrierRelease() SDL_CompilerBarrier() #define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier() #endif +#endif /** * \brief A type representing an atomic integer value. It is a struct diff --git a/code/SDL2/include/SDL_audio.h b/code/SDL2/include/SDL_audio.h index 4c987d51..4f655214 100644 --- a/code/SDL2/include/SDL_audio.h +++ b/code/SDL2/include/SDL_audio.h @@ -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 @@ -155,6 +155,9 @@ typedef Uint16 SDL_AudioFormat; * * Once the callback returns, the buffer will no longer be valid. * Stereo samples are stored in a LRLRLR ordering. + * + * You can choose to avoid callbacks and use SDL_QueueAudio() instead, if + * you like. Just open your audio device with a NULL callback. */ typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, int len); @@ -171,8 +174,8 @@ typedef struct SDL_AudioSpec Uint16 samples; /**< Audio buffer size in samples (power of 2) */ Uint16 padding; /**< Necessary for some compile environments */ Uint32 size; /**< Audio buffer size in bytes (calculated) */ - SDL_AudioCallback callback; - void *userdata; + SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ + void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */ } SDL_AudioSpec; @@ -273,9 +276,11 @@ extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); * to the audio buffer, and the length in bytes of the audio buffer. * This function usually runs in a separate thread, and so you should * protect data structures that it accesses by calling SDL_LockAudio() - * and SDL_UnlockAudio() in your code. + * and SDL_UnlockAudio() in your code. Alternately, you may pass a NULL + * pointer here, and call SDL_QueueAudio() with some frequency, to queue + * more audio samples to be played. * - \c desired->userdata is passed as the first parameter to your callback - * function. + * function. If you passed a NULL callback, this value is ignored. * * The audio device starts out playing silence when it's opened, and should * be enabled for playing by calling \c SDL_PauseAudio(0) when you are ready @@ -474,6 +479,100 @@ extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, SDL_AudioFormat format, Uint32 len, int volume); +/** + * Queue more audio on non-callback devices. + * + * SDL offers two ways to feed audio to the device: you can either supply a + * callback that SDL triggers with some frequency to obtain more audio + * (pull method), or you can supply no callback, and then SDL will expect + * you to supply data at regular intervals (push method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Queued data will drain to the device as + * necessary without further intervention from you. If the device needs + * audio but there is not enough queued, it will play silence to make up + * the difference. This means you will have skips in your audio playback + * if you aren't routinely queueing sufficient data. + * + * This function copies the supplied data, so you are safe to free it when + * the function returns. This function is thread-safe, but queueing to the + * same device from two threads at once does not promise which buffer will + * be queued first. + * + * You may not queue audio on a device that is using an application-supplied + * callback; doing so returns an error. You have to use the audio callback + * or queue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before queueing; SDL + * handles locking internally for this function. + * + * \param dev The device ID to which we will queue audio. + * \param data The data to queue to the device for later playback. + * \param len The number of bytes (not samples!) to which (data) points. + * \return zero on success, -1 on error. + * + * \sa SDL_GetQueuedAudioSize + * \sa SDL_ClearQueuedAudio + */ +extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); + +/** + * Get the number of bytes of still-queued audio. + * + * This is the number of bytes that have been queued for playback with + * SDL_QueueAudio(), but have not yet been sent to the hardware. + * + * Once we've sent it to the hardware, this function can not decide the exact + * byte boundary of what has been played. It's possible that we just gave the + * hardware several kilobytes right before you called this function, but it + * hasn't played any of it yet, or maybe half of it, etc. + * + * You may not queue audio on a device that is using an application-supplied + * callback; calling this function on such a device always returns 0. + * You have to use the audio callback or queue audio with SDL_QueueAudio(), + * but not both. + * + * You should not call SDL_LockAudio() on the device before querying; SDL + * handles locking internally for this function. + * + * \param dev The device ID of which we will query queued audio size. + * \return Number of bytes (not samples!) of queued audio. + * + * \sa SDL_QueueAudio + * \sa SDL_ClearQueuedAudio + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); + +/** + * Drop any queued audio data waiting to be sent to the hardware. + * + * Immediately after this call, SDL_GetQueuedAudioSize() will return 0 and + * the hardware will start playing silence if more audio isn't queued. + * + * This will not prevent playback of queued audio that's already been sent + * to the hardware, as we can not undo that, so expect there to be some + * fraction of a second of audio that might still be heard. This can be + * useful if you want to, say, drop any pending music during a level change + * in your game. + * + * You may not queue audio on a device that is using an application-supplied + * callback; calling this function on such a device is always a no-op. + * You have to use the audio callback or queue audio with SDL_QueueAudio(), + * but not both. + * + * You should not call SDL_LockAudio() on the device before clearing the + * queue; SDL handles locking internally for this function. + * + * This function always succeeds and thus returns void. + * + * \param dev The device ID of which to clear the audio queue. + * + * \sa SDL_QueueAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev); + + /** * \name Audio lock functions * diff --git a/code/SDL2/include/SDL_bits.h b/code/SDL2/include/SDL_bits.h index 341524fd..528da2ea 100644 --- a/code/SDL2/include/SDL_bits.h +++ b/code/SDL2/include/SDL_bits.h @@ -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/code/SDL2/include/SDL_blendmode.h b/code/SDL2/include/SDL_blendmode.h index 8c257be9..56d8ad66 100644 --- a/code/SDL2/include/SDL_blendmode.h +++ b/code/SDL2/include/SDL_blendmode.h @@ -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 @@ -58,6 +58,6 @@ typedef enum #endif #include "close_code.h" -#endif /* _SDL_video_h */ +#endif /* _SDL_blendmode_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/code/SDL2/include/SDL_clipboard.h b/code/SDL2/include/SDL_clipboard.h index 74e2b32f..a5556f21 100644 --- a/code/SDL2/include/SDL_clipboard.h +++ b/code/SDL2/include/SDL_clipboard.h @@ -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/code/SDL2/include/SDL_config.h b/code/SDL2/include/SDL_config.h index 9a2e51c5..4270c78b 100644 --- a/code/SDL2/include/SDL_config.h +++ b/code/SDL2/include/SDL_config.h @@ -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/code/SDL2/include/SDL_config.h.cmake b/code/SDL2/include/SDL_config.h.cmake index b6fb53aa..44173a05 100644 --- a/code/SDL2/include/SDL_config.h.cmake +++ b/code/SDL2/include/SDL_config.h.cmake @@ -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 @@ -46,7 +46,15 @@ #cmakedefine HAVE_GCC_ATOMICS @HAVE_GCC_ATOMICS@ #cmakedefine HAVE_GCC_SYNC_LOCK_TEST_AND_SET @HAVE_GCC_SYNC_LOCK_TEST_AND_SET@ -#cmakedefine HAVE_PTHREAD_SPINLOCK @HAVE_PTHREAD_SPINLOCK@ + +#cmakedefine HAVE_D3D_H @HAVE_D3D_H@ +#cmakedefine HAVE_D3D11_H @HAVE_D3D11_H@ +#cmakedefine HAVE_DDRAW_H @HAVE_DDRAW_H@ +#cmakedefine HAVE_DSOUND_H @HAVE_DSOUND_H@ +#cmakedefine HAVE_DINPUT_H @HAVE_DINPUT_H@ +#cmakedefine HAVE_XAUDIO2_H @HAVE_XAUDIO2_H@ +#cmakedefine HAVE_XINPUT_H @HAVE_XINPUT_H@ +#cmakedefine HAVE_DXGI_H @HAVE_DXGI_H@ /* Comment this if you want to build without any C library requirements */ #cmakedefine HAVE_LIBC 1 @@ -143,6 +151,9 @@ #cmakedefine HAVE_SIN 1 #cmakedefine HAVE_SINF 1 #cmakedefine HAVE_SQRT 1 +#cmakedefine HAVE_SQRTF 1 +#cmakedefine HAVE_TAN 1 +#cmakedefine HAVE_TANF 1 #cmakedefine HAVE_FSEEKO 1 #cmakedefine HAVE_FSEEKO64 1 #cmakedefine HAVE_SIGACTION 1 @@ -186,6 +197,7 @@ #cmakedefine SDL_FILESYSTEM_DISABLED @SDL_FILESYSTEM_DISABLED@ /* Enable various audio drivers */ +#cmakedefine SDL_AUDIO_DRIVER_ANDROID @SDL_AUDIO_DRIVER_ANDROID@ #cmakedefine SDL_AUDIO_DRIVER_ALSA @SDL_AUDIO_DRIVER_ALSA@ #cmakedefine SDL_AUDIO_DRIVER_ALSA_DYNAMIC @SDL_AUDIO_DRIVER_ALSA_DYNAMIC@ #cmakedefine SDL_AUDIO_DRIVER_ARTS @SDL_AUDIO_DRIVER_ARTS@ @@ -213,23 +225,29 @@ #cmakedefine SDL_AUDIO_DRIVER_WINMM @SDL_AUDIO_DRIVER_WINMM@ #cmakedefine SDL_AUDIO_DRIVER_FUSIONSOUND @SDL_AUDIO_DRIVER_FUSIONSOUND@ #cmakedefine SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC @SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC@ +#cmakedefine SDL_AUDIO_DRIVER_EMSCRIPTEN @SDL_AUDIO_DRIVER_EMSCRIPTEN@ /* Enable various input drivers */ #cmakedefine SDL_INPUT_LINUXEV @SDL_INPUT_LINUXEV@ #cmakedefine SDL_INPUT_LINUXKD @SDL_INPUT_LINUXKD@ #cmakedefine SDL_INPUT_TSLIB @SDL_INPUT_TSLIB@ +#cmakedefine SDL_JOYSTICK_ANDROID @SDL_JOYSTICK_ANDROID@ #cmakedefine SDL_JOYSTICK_HAIKU @SDL_JOYSTICK_HAIKU@ #cmakedefine SDL_JOYSTICK_DINPUT @SDL_JOYSTICK_DINPUT@ +#cmakedefine SDL_JOYSTICK_XINPUT @SDL_JOYSTICK_XINPUT@ #cmakedefine SDL_JOYSTICK_DUMMY @SDL_JOYSTICK_DUMMY@ #cmakedefine SDL_JOYSTICK_IOKIT @SDL_JOYSTICK_IOKIT@ +#cmakedefine SDL_JOYSTICK_MFI @SDL_JOYSTICK_MFI@ #cmakedefine SDL_JOYSTICK_LINUX @SDL_JOYSTICK_LINUX@ #cmakedefine SDL_JOYSTICK_WINMM @SDL_JOYSTICK_WINMM@ #cmakedefine SDL_JOYSTICK_USBHID @SDL_JOYSTICK_USBHID@ #cmakedefine SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H @SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H@ +#cmakedefine SDL_JOYSTICK_EMSCRIPTEN @SDL_JOYSTICK_EMSCRIPTEN@ #cmakedefine SDL_HAPTIC_DUMMY @SDL_HAPTIC_DUMMY@ #cmakedefine SDL_HAPTIC_LINUX @SDL_HAPTIC_LINUX@ #cmakedefine SDL_HAPTIC_IOKIT @SDL_HAPTIC_IOKIT@ #cmakedefine SDL_HAPTIC_DINPUT @SDL_HAPTIC_DINPUT@ +#cmakedefine SDL_HAPTIC_XINPUT @SDL_HAPTIC_XINPUT@ /* Enable various shared object loading systems */ #cmakedefine SDL_LOADSO_HAIKU @SDL_LOADSO_HAIKU@ @@ -252,6 +270,7 @@ #cmakedefine SDL_TIMER_WINCE @SDL_TIMER_WINCE@ /* Enable various video drivers */ +#cmakedefine SDL_VIDEO_DRIVER_ANDROID @SDL_VIDEO_DRIVER_ANDROID@ #cmakedefine SDL_VIDEO_DRIVER_HAIKU @SDL_VIDEO_DRIVER_HAIKU@ #cmakedefine SDL_VIDEO_DRIVER_COCOA @SDL_VIDEO_DRIVER_COCOA@ #cmakedefine SDL_VIDEO_DRIVER_DIRECTFB @SDL_VIDEO_DRIVER_DIRECTFB@ @@ -259,19 +278,20 @@ #cmakedefine SDL_VIDEO_DRIVER_DUMMY @SDL_VIDEO_DRIVER_DUMMY@ #cmakedefine SDL_VIDEO_DRIVER_WINDOWS @SDL_VIDEO_DRIVER_WINDOWS@ #cmakedefine SDL_VIDEO_DRIVER_WAYLAND @SDL_VIDEO_DRIVER_WAYLAND@ +#cmakedefine SDL_VIDEO_DRIVER_RPI @SDL_VIDEO_DRIVER_RPI@ +#cmakedefine SDL_VIDEO_DRIVER_VIVANTE @SDL_VIDEO_DRIVER_VIVANTE@ +#cmakedefine SDL_VIDEO_DRIVER_VIVANTE_VDK @SDL_VIDEO_DRIVER_VIVANTE_VDK@ -#if 0 -/* !!! FIXME: in configure script version, missing here: */ -#undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH -#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC -#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL -#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR -#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON -#endif +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH @SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH@ +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC@ +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL@ +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR@ +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON@ #cmakedefine SDL_VIDEO_DRIVER_MIR @SDL_VIDEO_DRIVER_MIR@ #cmakedefine SDL_VIDEO_DRIVER_MIR_DYNAMIC @SDL_VIDEO_DRIVER_MIR_DYNAMIC@ #cmakedefine SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON @SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON@ +#cmakedefine SDL_VIDEO_DRIVER_EMSCRIPTEN @SDL_VIDEO_DRIVER_EMSCRIPTEN@ #cmakedefine SDL_VIDEO_DRIVER_X11 @SDL_VIDEO_DRIVER_X11@ #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC @SDL_VIDEO_DRIVER_X11_DYNAMIC@ #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT @SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT@ @@ -282,6 +302,7 @@ #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS @SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS@ #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE @SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE@ #cmakedefine SDL_VIDEO_DRIVER_X11_XCURSOR @SDL_VIDEO_DRIVER_X11_XCURSOR@ +#cmakedefine SDL_VIDEO_DRIVER_X11_XDBE @SDL_VIDEO_DRIVER_X11_XDBE@ #cmakedefine SDL_VIDEO_DRIVER_X11_XINERAMA @SDL_VIDEO_DRIVER_X11_XINERAMA@ #cmakedefine SDL_VIDEO_DRIVER_X11_XINPUT2 @SDL_VIDEO_DRIVER_X11_XINPUT2@ #cmakedefine SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH @SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH@ @@ -290,7 +311,6 @@ #cmakedefine SDL_VIDEO_DRIVER_X11_XSHAPE @SDL_VIDEO_DRIVER_X11_XSHAPE@ #cmakedefine SDL_VIDEO_DRIVER_X11_XVIDMODE @SDL_VIDEO_DRIVER_X11_XVIDMODE@ #cmakedefine SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS @SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS@ -#cmakedefine SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 @SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32@ #cmakedefine SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY @SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY@ #cmakedefine SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM @SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM@ @@ -314,18 +334,22 @@ #cmakedefine SDL_VIDEO_OPENGL_OSMESA_DYNAMIC @SDL_VIDEO_OPENGL_OSMESA_DYNAMIC@ /* Enable system power support */ +#cmakedefine SDL_POWER_ANDROID @SDL_POWER_ANDROID@ #cmakedefine SDL_POWER_LINUX @SDL_POWER_LINUX@ #cmakedefine SDL_POWER_WINDOWS @SDL_POWER_WINDOWS@ #cmakedefine SDL_POWER_MACOSX @SDL_POWER_MACOSX@ #cmakedefine SDL_POWER_HAIKU @SDL_POWER_HAIKU@ +#cmakedefine SDL_POWER_EMSCRIPTEN @SDL_POWER_EMSCRIPTEN@ #cmakedefine SDL_POWER_HARDWIRED @SDL_POWER_HARDWIRED@ /* Enable system filesystem support */ +#cmakedefine SDL_FILESYSTEM_ANDROID @SDL_FILESYSTEM_ANDROID@ #cmakedefine SDL_FILESYSTEM_HAIKU @SDL_FILESYSTEM_HAIKU@ #cmakedefine SDL_FILESYSTEM_COCOA @SDL_FILESYSTEM_COCOA@ #cmakedefine SDL_FILESYSTEM_DUMMY @SDL_FILESYSTEM_DUMMY@ #cmakedefine SDL_FILESYSTEM_UNIX @SDL_FILESYSTEM_UNIX@ #cmakedefine SDL_FILESYSTEM_WINDOWS @SDL_FILESYSTEM_WINDOWS@ +#cmakedefine SDL_FILESYSTEM_EMSCRIPTEN @SDL_FILESYSTEM_EMSCRIPTEN@ /* Enable assembly routines */ #cmakedefine SDL_ASSEMBLY_ROUTINES @SDL_ASSEMBLY_ROUTINES@ diff --git a/code/SDL2/include/SDL_config.h.in b/code/SDL2/include/SDL_config.h.in index 689dcf83..2071be4e 100644 --- a/code/SDL2/include/SDL_config.h.in +++ b/code/SDL2/include/SDL_config.h.in @@ -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 @@ -49,7 +49,12 @@ #endif #undef HAVE_GCC_ATOMICS #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET -#undef HAVE_PTHREAD_SPINLOCK + +#undef HAVE_DDRAW_H +#undef HAVE_DINPUT_H +#undef HAVE_DSOUND_H +#undef HAVE_DXGI_H +#undef HAVE_XINPUT_H /* Comment this if you want to build without any C library requirements */ #undef HAVE_LIBC @@ -76,6 +81,7 @@ #undef HAVE_PTHREAD_NP_H #undef HAVE_LIBUDEV_H #undef HAVE_DBUS_DBUS_H +#undef HAVE_IBUS_IBUS_H /* C library functions */ #undef HAVE_MALLOC @@ -148,6 +154,9 @@ #undef HAVE_SIN #undef HAVE_SINF #undef HAVE_SQRT +#undef HAVE_SQRTF +#undef HAVE_TAN +#undef HAVE_TANF #undef HAVE_FSEEKO #undef HAVE_FSEEKO64 #undef HAVE_SIGACTION @@ -201,10 +210,12 @@ #undef SDL_AUDIO_DRIVER_COREAUDIO #undef SDL_AUDIO_DRIVER_DISK #undef SDL_AUDIO_DRIVER_DUMMY +#undef SDL_AUDIO_DRIVER_ANDROID #undef SDL_AUDIO_DRIVER_XAUDIO2 #undef SDL_AUDIO_DRIVER_DSOUND #undef SDL_AUDIO_DRIVER_ESD #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC +#undef SDL_AUDIO_DRIVER_NACL #undef SDL_AUDIO_DRIVER_NAS #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC #undef SDL_AUDIO_DRIVER_SNDIO @@ -217,6 +228,7 @@ #undef SDL_AUDIO_DRIVER_WINMM #undef SDL_AUDIO_DRIVER_FUSIONSOUND #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC +#undef SDL_AUDIO_DRIVER_EMSCRIPTEN /* Enable various input drivers */ #undef SDL_INPUT_LINUXEV @@ -224,16 +236,20 @@ #undef SDL_INPUT_TSLIB #undef SDL_JOYSTICK_HAIKU #undef SDL_JOYSTICK_DINPUT +#undef SDL_JOYSTICK_XINPUT #undef SDL_JOYSTICK_DUMMY #undef SDL_JOYSTICK_IOKIT #undef SDL_JOYSTICK_LINUX +#undef SDL_JOYSTICK_ANDROID #undef SDL_JOYSTICK_WINMM #undef SDL_JOYSTICK_USBHID #undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H +#undef SDL_JOYSTICK_EMSCRIPTEN #undef SDL_HAPTIC_DUMMY #undef SDL_HAPTIC_LINUX #undef SDL_HAPTIC_IOKIT #undef SDL_HAPTIC_DINPUT +#undef SDL_HAPTIC_XINPUT /* Enable various shared object loading systems */ #undef SDL_LOADSO_HAIKU @@ -272,6 +288,8 @@ #undef SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON #undef SDL_VIDEO_DRIVER_X11 #undef SDL_VIDEO_DRIVER_RPI +#undef SDL_VIDEO_DRIVER_ANDROID +#undef SDL_VIDEO_DRIVER_EMSCRIPTEN #undef SDL_VIDEO_DRIVER_X11_DYNAMIC #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR @@ -281,6 +299,7 @@ #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE #undef SDL_VIDEO_DRIVER_X11_XCURSOR +#undef SDL_VIDEO_DRIVER_X11_XDBE #undef SDL_VIDEO_DRIVER_X11_XINERAMA #undef SDL_VIDEO_DRIVER_X11_XINPUT2 #undef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH @@ -289,9 +308,11 @@ #undef SDL_VIDEO_DRIVER_X11_XSHAPE #undef SDL_VIDEO_DRIVER_X11_XVIDMODE #undef SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS -#undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 #undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY #undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM +#undef SDL_VIDEO_DRIVER_NACL +#undef SDL_VIDEO_DRIVER_VIVANTE +#undef SDL_VIDEO_DRIVER_VIVANTE_VDK #undef SDL_VIDEO_RENDER_D3D #undef SDL_VIDEO_RENDER_D3D11 @@ -317,6 +338,8 @@ #undef SDL_POWER_WINDOWS #undef SDL_POWER_MACOSX #undef SDL_POWER_HAIKU +#undef SDL_POWER_ANDROID +#undef SDL_POWER_EMSCRIPTEN #undef SDL_POWER_HARDWIRED /* Enable system filesystem support */ @@ -325,6 +348,9 @@ #undef SDL_FILESYSTEM_DUMMY #undef SDL_FILESYSTEM_UNIX #undef SDL_FILESYSTEM_WINDOWS +#undef SDL_FILESYSTEM_NACL +#undef SDL_FILESYSTEM_ANDROID +#undef SDL_FILESYSTEM_EMSCRIPTEN /* Enable assembly routines */ #undef SDL_ASSEMBLY_ROUTINES diff --git a/code/SDL2/include/SDL_config_android.h b/code/SDL2/include/SDL_config_android.h index 738dd94c..a388ba8d 100644 --- a/code/SDL2/include/SDL_config_android.h +++ b/code/SDL2/include/SDL_config_android.h @@ -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 @@ -43,7 +43,6 @@ #define HAVE_STDINT_H 1 #define HAVE_CTYPE_H 1 #define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 /* C library functions */ #define HAVE_MALLOC 1 @@ -76,7 +75,6 @@ #define HAVE_STRTOULL 1 #define HAVE_STRTOD 1 #define HAVE_ATOI 1 -#define HAVE_ATOF 1 #define HAVE_STRCMP 1 #define HAVE_STRNCMP 1 #define HAVE_STRCASECMP 1 @@ -100,10 +98,13 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 -#define HAVE_SIGACTION 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 #define HAVE_SYSCONF 1 +#define HAVE_CLOCK_GETTIME 1 #define SIZEOF_VOIDP 4 @@ -138,7 +139,7 @@ /* Enable system power support */ #define SDL_POWER_ANDROID 1 -/* !!! FIXME: what does Android do for filesystem stuff? */ -#define SDL_FILESYSTEM_DUMMY 1 +/* Enable the filesystem driver */ +#define SDL_FILESYSTEM_ANDROID 1 #endif /* _SDL_config_android_h */ diff --git a/code/SDL2/include/SDL_config_iphoneos.h b/code/SDL2/include/SDL_config_iphoneos.h index a0f55b6a..304c8920 100644 --- a/code/SDL2/include/SDL_config_iphoneos.h +++ b/code/SDL2/include/SDL_config_iphoneos.h @@ -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 @@ -98,6 +98,9 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 @@ -110,10 +113,13 @@ #define SDL_AUDIO_DRIVER_DUMMY 1 /* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ -#define SDL_HAPTIC_DISABLED 1 +#define SDL_HAPTIC_DUMMY 1 + +/* Enable MFi joystick support */ +#define SDL_JOYSTICK_MFI 1 /* Enable Unix style SO loading */ -/* Technically this works, but it violates the iPhone developer agreement */ +/* Technically this works, but violates the iOS dev agreement prior to iOS 8 */ /* #define SDL_LOADSO_DLOPEN 1 */ /* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ @@ -131,6 +137,7 @@ #define SDL_VIDEO_DRIVER_DUMMY 1 /* enable OpenGL ES */ +#define SDL_VIDEO_OPENGL_ES2 1 #define SDL_VIDEO_OPENGL_ES 1 #define SDL_VIDEO_RENDER_OGL_ES 1 #define SDL_VIDEO_RENDER_OGL_ES2 1 @@ -141,11 +148,11 @@ /* enable iPhone keyboard support */ #define SDL_IPHONE_KEYBOARD 1 -/* enable joystick subsystem */ -#define SDL_JOYSTICK_DISABLED 0 +/* enable iOS extended launch screen */ +#define SDL_IPHONE_LAUNCHSCREEN 1 /* Set max recognized G-force from accelerometer - See src/joystick/uikit/SDLUIAccelerationDelegate.m for notes on why this is needed + See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed */ #define SDL_IPHONE_MAX_GFORCE 5.0 diff --git a/code/SDL2/include/SDL_config_macosx.h b/code/SDL2/include/SDL_config_macosx.h index e627aef2..5c8b7e03 100644 --- a/code/SDL2/include/SDL_config_macosx.h +++ b/code/SDL2/include/SDL_config_macosx.h @@ -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 @@ -96,6 +96,9 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 @@ -136,6 +139,7 @@ #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/usr/X11R6/lib/libXrandr.2.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/usr/X11R6/lib/libXss.1.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "/usr/X11R6/lib/libXxf86vm.1.dylib" +#define SDL_VIDEO_DRIVER_X11_XDBE 1 #define SDL_VIDEO_DRIVER_X11_XINERAMA 1 #define SDL_VIDEO_DRIVER_X11_XRANDR 1 #define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1 diff --git a/code/SDL2/include/SDL_config_minimal.h b/code/SDL2/include/SDL_config_minimal.h index 1bddafea..3c9d09af 100644 --- a/code/SDL2/include/SDL_config_minimal.h +++ b/code/SDL2/include/SDL_config_minimal.h @@ -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/code/SDL2/include/SDL_config_pandora.h b/code/SDL2/include/SDL_config_pandora.h index ac8b0850..7b51e571 100644 --- a/code/SDL2/include/SDL_config_pandora.h +++ b/code/SDL2/include/SDL_config_pandora.h @@ -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 @@ -95,6 +95,9 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 diff --git a/code/SDL2/include/SDL_config_psp.h b/code/SDL2/include/SDL_config_psp.h index 2f9d023c..a6e49609 100644 --- a/code/SDL2/include/SDL_config_psp.h +++ b/code/SDL2/include/SDL_config_psp.h @@ -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 @@ -98,6 +98,9 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 /* #define HAVE_SYSCONF 1 */ diff --git a/code/SDL2/include/SDL_config_windows.h b/code/SDL2/include/SDL_config_windows.h index 35eda465..890986cc 100644 --- a/code/SDL2/include/SDL_config_windows.h +++ b/code/SDL2/include/SDL_config_windows.h @@ -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 @@ -76,6 +76,12 @@ typedef unsigned int uintptr_t; # define SIZEOF_VOIDP 4 #endif +#define HAVE_DDRAW_H 1 +#define HAVE_DINPUT_H 1 +#define HAVE_DSOUND_H 1 +#define HAVE_DXGI_H 1 +#define HAVE_XINPUT_H 1 + /* This is disabled by default to avoid C runtime dependencies and manifest requirements */ #ifdef HAVE_LIBC /* Useful headers */ @@ -130,6 +136,9 @@ typedef unsigned int uintptr_t; #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #if _MSC_VER >= 1800 #define HAVE_STRTOLL 1 #define HAVE_VSSCANF 1 @@ -153,7 +162,9 @@ typedef unsigned int uintptr_t; /* Enable various input drivers */ #define SDL_JOYSTICK_DINPUT 1 +#define SDL_JOYSTICK_XINPUT 1 #define SDL_HAPTIC_DINPUT 1 +#define SDL_HAPTIC_XINPUT 1 /* Enable various shared object loading systems */ #define SDL_LOADSO_WINDOWS 1 diff --git a/code/SDL2/include/SDL_config_winrt.h b/code/SDL2/include/SDL_config_winrt.h index 78b43ab6..e392f773 100644 --- a/code/SDL2/include/SDL_config_winrt.h +++ b/code/SDL2/include/SDL_config_winrt.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2012 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 @@ -19,11 +19,26 @@ 3. This notice may not be removed or altered from any source distribution. */ -#ifndef _SDL_config_windows_h -#define _SDL_config_windows_h +#ifndef _SDL_config_winrt_h +#define _SDL_config_winrt_h #include "SDL_platform.h" +/* Make sure the Windows SDK's NTDDI_VERSION macro gets defined. This is used + by SDL to determine which version of the Windows SDK is being used. +*/ +#include + +/* Define possibly-undefined NTDDI values (used when compiling SDL against + older versions of the Windows SDK. +*/ +#ifndef NTDDI_WINBLUE +#define NTDDI_WINBLUE 0x06030000 +#endif +#ifndef NTDDI_WIN10 +#define NTDDI_WIN10 0x0A000000 +#endif + /* This is a set of defines to configure the SDL features */ #if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H) @@ -77,6 +92,10 @@ typedef unsigned int uintptr_t; #endif /* Useful headers */ +#define HAVE_DXGI_H 1 +#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP +#define HAVE_XINPUT_H 1 +#endif #define HAVE_LIBC 1 #define HAVE_STDIO_H 1 #define STDC_HEADERS 1 @@ -136,6 +155,9 @@ typedef unsigned int uintptr_t; #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE__FSEEKI64 1 /* Enable various audio drivers */ @@ -144,20 +166,24 @@ typedef unsigned int uintptr_t; #define SDL_AUDIO_DRIVER_DUMMY 1 /* Enable various input drivers */ -// TODO, WinRT: Get haptic support working -#define SDL_HAPTIC_DISABLED 1 - #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP #define SDL_JOYSTICK_DISABLED 1 +#define SDL_HAPTIC_DISABLED 1 #else #define SDL_JOYSTICK_XINPUT 1 +#define SDL_HAPTIC_XINPUT 1 #endif /* Enable various shared object loading systems */ #define SDL_LOADSO_WINDOWS 1 /* Enable various threading systems */ +#if (NTDDI_VERSION >= NTDDI_WINBLUE) +#define SDL_THREAD_WINDOWS 1 +#else +/* WinRT on Windows 8.0 and Windows Phone 8.0 don't support CreateThread() */ #define SDL_THREAD_STDCPP 1 +#endif /* Enable various timer systems */ #define SDL_TIMER_WINDOWS 1 @@ -167,10 +193,8 @@ typedef unsigned int uintptr_t; #define SDL_VIDEO_DRIVER_DUMMY 1 /* Enable OpenGL ES 2.0 (via a modified ANGLE library) */ -#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP /* TODO, WinRT: try adding OpenGL ES 2 support for Windows Phone 8 */ #define SDL_VIDEO_OPENGL_ES2 1 #define SDL_VIDEO_OPENGL_EGL 1 -#endif /* Enable appropriate renderer(s) */ #define SDL_VIDEO_RENDER_D3D11 1 @@ -187,4 +211,4 @@ typedef unsigned int uintptr_t; #define SDL_ASSEMBLY_ROUTINES 1 #endif -#endif /* _SDL_config_windows_h */ +#endif /* _SDL_config_winrt_h */ diff --git a/code/SDL2/include/SDL_config_wiz.h b/code/SDL2/include/SDL_config_wiz.h index 7efc20bc..e090a1a9 100644 --- a/code/SDL2/include/SDL_config_wiz.h +++ b/code/SDL2/include/SDL_config_wiz.h @@ -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 @@ -89,12 +89,14 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 #define HAVE_POW 1 -#define SDL_CDROM_DISABLED 1 #define SDL_AUDIO_DRIVER_DUMMY 1 #define SDL_AUDIO_DRIVER_OSS 1 diff --git a/code/SDL2/include/SDL_copying.h b/code/SDL2/include/SDL_copying.h index 0964da84..212da0ee 100644 --- a/code/SDL2/include/SDL_copying.h +++ b/code/SDL2/include/SDL_copying.h @@ -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/code/SDL2/include/SDL_cpuinfo.h b/code/SDL2/include/SDL_cpuinfo.h index 1f6efd38..d0ba47bf 100644 --- a/code/SDL2/include/SDL_cpuinfo.h +++ b/code/SDL2/include/SDL_cpuinfo.h @@ -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 @@ -139,6 +139,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); */ extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); +/** + * This function returns true if the CPU has AVX2 features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); + /** * This function returns the amount of RAM configured in the system, in MB. */ diff --git a/code/SDL2/include/SDL_egl.h b/code/SDL2/include/SDL_egl.h index d312f042..bea2a6c0 100644 --- a/code/SDL2/include/SDL_egl.h +++ b/code/SDL2/include/SDL_egl.h @@ -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 @@ -20,13 +20,14 @@ */ /** - * \file SDL_opengles.h + * \file SDL_egl.h * - * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. + * This is a simple file to encapsulate the EGL API headers. */ #ifndef _MSC_VER #include +#include #else /* _MSC_VER */ @@ -394,8 +395,8 @@ typedef enum { #if __WINRT__ #include typedef IUnknown * EGLNativeWindowType; -typedef int EGLNativeDisplayType; -typedef HBITMAP EGLNativePixmapType; +typedef IUnknown * EGLNativePixmapType; +typedef IUnknown * EGLNativeDisplayType; #else typedef HDC EGLNativeDisplayType; typedef HBITMAP EGLNativePixmapType; @@ -420,7 +421,7 @@ typedef struct gbm_device *EGLNativeDisplayType; typedef struct gbm_bo *EGLNativePixmapType; typedef void *EGLNativeWindowType; -#elif defined(ANDROID) /* Android */ +#elif defined(__ANDROID__) /* Android */ struct ANativeWindow; struct egl_native_pixmap_t; @@ -477,14 +478,15 @@ typedef khronos_int32_t EGLint; #endif /* __eglplatform_h */ -/* -*- mode: c; tab-width: 8; -*- */ -/* vi: set sw=4 ts=8: */ -/* Reference version of egl.h for EGL 1.4. -* $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $ -*/ +#ifndef __egl_h_ +#define __egl_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif /* -** Copyright (c) 2007-2009 The Khronos Group Inc. +** 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 @@ -505,301 +507,272 @@ typedef khronos_int32_t EGLint; ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ - -#ifndef __egl_h_ -#define __egl_h_ - -/* All platform-dependent types and macro boilerplate (such as EGLAPI -* and EGLAPIENTRY) should go in eglplatform.h. +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 31566 $ on $Date: 2015-06-23 08:48:48 -0700 (Tue, 23 Jun 2015) $ */ + /*#include */ -#ifdef __cplusplus -extern "C" { -#endif +/* Generated on date 20150623 */ - /* EGL Types */ - /* EGLint is defined in eglplatform.h */ - typedef unsigned int EGLBoolean; - typedef unsigned int EGLenum; - typedef void *EGLConfig; - typedef void *EGLContext; - typedef void *EGLDisplay; - typedef void *EGLSurface; - typedef void *EGLClientBuffer; +/* Generated C header for: + * API: egl + * Versions considered: .* + * Versions emitted: .* + * Default extensions included: None + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ - /* EGL Versioning */ -#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 +#ifndef EGL_VERSION_1_0 +#define EGL_VERSION_1_0 1 +typedef unsigned int EGLBoolean; +typedef void *EGLDisplay; +typedef void *EGLConfig; +typedef void *EGLSurface; +typedef void *EGLContext; +typedef void (*__eglMustCastToProperFunctionPointerType)(void); +#define EGL_ALPHA_SIZE 0x3021 +#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_BLUE_SIZE 0x3022 +#define EGL_BUFFER_SIZE 0x3020 +#define EGL_CONFIG_CAVEAT 0x3027 +#define EGL_CONFIG_ID 0x3028 +#define EGL_CORE_NATIVE_ENGINE 0x305B +#define EGL_DEPTH_SIZE 0x3025 +#define EGL_DONT_CARE ((EGLint)-1) +#define EGL_DRAW 0x3059 +#define EGL_EXTENSIONS 0x3055 +#define EGL_FALSE 0 +#define EGL_GREEN_SIZE 0x3023 +#define EGL_HEIGHT 0x3056 +#define EGL_LARGEST_PBUFFER 0x3058 +#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_NONE 0x3038 +#define EGL_NON_CONFORMANT_CONFIG 0x3051 +#define EGL_NOT_INITIALIZED 0x3001 +#define EGL_NO_CONTEXT ((EGLContext)0) +#define EGL_NO_DISPLAY ((EGLDisplay)0) +#define EGL_NO_SURFACE ((EGLSurface)0) +#define EGL_PBUFFER_BIT 0x0001 +#define EGL_PIXMAP_BIT 0x0002 +#define EGL_READ 0x305A +#define EGL_RED_SIZE 0x3024 +#define EGL_SAMPLES 0x3031 +#define EGL_SAMPLE_BUFFERS 0x3032 +#define EGL_SLOW_CONFIG 0x3050 +#define EGL_STENCIL_SIZE 0x3026 +#define EGL_SUCCESS 0x3000 +#define EGL_SURFACE_TYPE 0x3033 +#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 +#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 +#define EGL_TRANSPARENT_RED_VALUE 0x3037 +#define EGL_TRANSPARENT_RGB 0x3052 +#define EGL_TRANSPARENT_TYPE 0x3034 +#define EGL_TRUE 1 +#define EGL_VENDOR 0x3053 +#define EGL_VERSION 0x3054 +#define EGL_WIDTH 0x3057 +#define EGL_WINDOW_BIT 0x0004 +EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); +EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); +EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface); +EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); +EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void); +EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw); +EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id); +EGLAPI EGLint EGLAPIENTRY eglGetError (void); +EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); +EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor); +EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); +EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface); +EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine); +#endif /* EGL_VERSION_1_0 */ - /* EGL Enumerants. Bitmasks and other exceptional cases aside, most - * enums are assigned unique values starting at 0x3000. - */ +#ifndef EGL_VERSION_1_1 +#define EGL_VERSION_1_1 1 +#define EGL_BACK_BUFFER 0x3084 +#define EGL_BIND_TO_TEXTURE_RGB 0x3039 +#define EGL_BIND_TO_TEXTURE_RGBA 0x303A +#define EGL_CONTEXT_LOST 0x300E +#define EGL_MIN_SWAP_INTERVAL 0x303B +#define EGL_MAX_SWAP_INTERVAL 0x303C +#define EGL_MIPMAP_TEXTURE 0x3082 +#define EGL_MIPMAP_LEVEL 0x3083 +#define EGL_NO_TEXTURE 0x305C +#define EGL_TEXTURE_2D 0x305F +#define EGL_TEXTURE_FORMAT 0x3080 +#define EGL_TEXTURE_RGB 0x305D +#define EGL_TEXTURE_RGBA 0x305E +#define EGL_TEXTURE_TARGET 0x3081 +EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); +EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); +EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); +EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval); +#endif /* EGL_VERSION_1_1 */ - /* EGL aliases */ -#define EGL_FALSE 0 -#define EGL_TRUE 1 +#ifndef EGL_VERSION_1_2 +#define EGL_VERSION_1_2 1 +typedef unsigned int EGLenum; +typedef void *EGLClientBuffer; +#define EGL_ALPHA_FORMAT 0x3088 +#define EGL_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_ALPHA_FORMAT_PRE 0x308C +#define EGL_ALPHA_MASK_SIZE 0x303E +#define EGL_BUFFER_PRESERVED 0x3094 +#define EGL_BUFFER_DESTROYED 0x3095 +#define EGL_CLIENT_APIS 0x308D +#define EGL_COLORSPACE 0x3087 +#define EGL_COLORSPACE_sRGB 0x3089 +#define EGL_COLORSPACE_LINEAR 0x308A +#define EGL_COLOR_BUFFER_TYPE 0x303F +#define EGL_CONTEXT_CLIENT_TYPE 0x3097 +#define EGL_DISPLAY_SCALING 10000 +#define EGL_HORIZONTAL_RESOLUTION 0x3090 +#define EGL_LUMINANCE_BUFFER 0x308F +#define EGL_LUMINANCE_SIZE 0x303D +#define EGL_OPENGL_ES_BIT 0x0001 +#define EGL_OPENVG_BIT 0x0002 +#define EGL_OPENGL_ES_API 0x30A0 +#define EGL_OPENVG_API 0x30A1 +#define EGL_OPENVG_IMAGE 0x3096 +#define EGL_PIXEL_ASPECT_RATIO 0x3092 +#define EGL_RENDERABLE_TYPE 0x3040 +#define EGL_RENDER_BUFFER 0x3086 +#define EGL_RGB_BUFFER 0x308E +#define EGL_SINGLE_BUFFER 0x3085 +#define EGL_SWAP_BEHAVIOR 0x3093 +#define EGL_UNKNOWN ((EGLint)-1) +#define EGL_VERTICAL_RESOLUTION 0x3091 +EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api); +EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void); +#endif /* EGL_VERSION_1_2 */ - /* Out-of-band handle values */ -#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) -#define EGL_NO_CONTEXT ((EGLContext)0) -#define EGL_NO_DISPLAY ((EGLDisplay)0) -#define EGL_NO_SURFACE ((EGLSurface)0) +#ifndef EGL_VERSION_1_3 +#define EGL_VERSION_1_3 1 +#define EGL_CONFORMANT 0x3042 +#define EGL_CONTEXT_CLIENT_VERSION 0x3098 +#define EGL_MATCH_NATIVE_PIXMAP 0x3041 +#define EGL_OPENGL_ES2_BIT 0x0004 +#define EGL_VG_ALPHA_FORMAT 0x3088 +#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_VG_ALPHA_FORMAT_PRE 0x308C +#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 +#define EGL_VG_COLORSPACE 0x3087 +#define EGL_VG_COLORSPACE_sRGB 0x3089 +#define EGL_VG_COLORSPACE_LINEAR 0x308A +#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 +#endif /* EGL_VERSION_1_3 */ - /* Out-of-band attribute value */ -#define EGL_DONT_CARE ((EGLint)-1) +#ifndef EGL_VERSION_1_4 +#define EGL_VERSION_1_4 1 +#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) +#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 +#define EGL_MULTISAMPLE_RESOLVE 0x3099 +#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A +#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B +#define EGL_OPENGL_API 0x30A2 +#define EGL_OPENGL_BIT 0x0008 +#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 +EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void); +#endif /* EGL_VERSION_1_4 */ - /* Errors / GetError return values */ -#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 /* EGL 1.1 - IMG_power_management */ - - /* Reserved 0x300F-0x301F for additional errors */ - - /* Config attributes */ -#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 /* Attrib list terminator */ -#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 /* Pseudo-attribute (not queryable) */ -#define EGL_CONFORMANT 0x3042 - - /* Reserved 0x3041-0x304F for additional config attributes */ - - /* Config attribute values */ -#define EGL_SLOW_CONFIG 0x3050 /* EGL_CONFIG_CAVEAT value */ -#define EGL_NON_CONFORMANT_CONFIG 0x3051 /* EGL_CONFIG_CAVEAT value */ -#define EGL_TRANSPARENT_RGB 0x3052 /* EGL_TRANSPARENT_TYPE value */ -#define EGL_RGB_BUFFER 0x308E /* EGL_COLOR_BUFFER_TYPE value */ -#define EGL_LUMINANCE_BUFFER 0x308F /* EGL_COLOR_BUFFER_TYPE value */ - - /* More config attribute values, for EGL_TEXTURE_FORMAT */ -#define EGL_NO_TEXTURE 0x305C -#define EGL_TEXTURE_RGB 0x305D -#define EGL_TEXTURE_RGBA 0x305E -#define EGL_TEXTURE_2D 0x305F - - /* Config attribute mask bits */ -#define EGL_PBUFFER_BIT 0x0001 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_PIXMAP_BIT 0x0002 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_WINDOW_BIT 0x0004 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 /* EGL_SURFACE_TYPE mask bits */ - -#define EGL_OPENGL_ES_BIT 0x0001 /* EGL_RENDERABLE_TYPE mask bits */ -#define EGL_OPENVG_BIT 0x0002 /* EGL_RENDERABLE_TYPE mask bits */ -#define EGL_OPENGL_ES2_BIT 0x0004 /* EGL_RENDERABLE_TYPE mask bits */ -#define EGL_OPENGL_BIT 0x0008 /* EGL_RENDERABLE_TYPE mask bits */ - - /* QueryString targets */ -#define EGL_VENDOR 0x3053 -#define EGL_VERSION 0x3054 -#define EGL_EXTENSIONS 0x3055 -#define EGL_CLIENT_APIS 0x308D - - /* QuerySurface / SurfaceAttrib / CreatePbufferSurface targets */ -#define EGL_HEIGHT 0x3056 -#define EGL_WIDTH 0x3057 -#define EGL_LARGEST_PBUFFER 0x3058 -#define EGL_TEXTURE_FORMAT 0x3080 -#define EGL_TEXTURE_TARGET 0x3081 -#define EGL_MIPMAP_TEXTURE 0x3082 -#define EGL_MIPMAP_LEVEL 0x3083 -#define EGL_RENDER_BUFFER 0x3086 -#define EGL_VG_COLORSPACE 0x3087 -#define EGL_VG_ALPHA_FORMAT 0x3088 -#define EGL_HORIZONTAL_RESOLUTION 0x3090 -#define EGL_VERTICAL_RESOLUTION 0x3091 -#define EGL_PIXEL_ASPECT_RATIO 0x3092 -#define EGL_SWAP_BEHAVIOR 0x3093 -#define EGL_MULTISAMPLE_RESOLVE 0x3099 - - /* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */ -#define EGL_BACK_BUFFER 0x3084 -#define EGL_SINGLE_BUFFER 0x3085 - - /* OpenVG color spaces */ -#define EGL_VG_COLORSPACE_sRGB 0x3089 /* EGL_VG_COLORSPACE value */ -#define EGL_VG_COLORSPACE_LINEAR 0x308A /* EGL_VG_COLORSPACE value */ - - /* OpenVG alpha formats */ -#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B /* EGL_ALPHA_FORMAT value */ -#define EGL_VG_ALPHA_FORMAT_PRE 0x308C /* EGL_ALPHA_FORMAT value */ - - /* Constant scale factor by which fractional display resolutions & - * aspect ratio are scaled when queried as integer values. - */ -#define EGL_DISPLAY_SCALING 10000 - - /* Unknown display resolution/aspect ratio */ -#define EGL_UNKNOWN ((EGLint)-1) - - /* Back buffer swap behaviors */ -#define EGL_BUFFER_PRESERVED 0x3094 /* EGL_SWAP_BEHAVIOR value */ -#define EGL_BUFFER_DESTROYED 0x3095 /* EGL_SWAP_BEHAVIOR value */ - - /* CreatePbufferFromClientBuffer buffer types */ -#define EGL_OPENVG_IMAGE 0x3096 - - /* QueryContext targets */ -#define EGL_CONTEXT_CLIENT_TYPE 0x3097 - - /* CreateContext attributes */ -#define EGL_CONTEXT_CLIENT_VERSION 0x3098 - - /* Multisample resolution behaviors */ -#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A /* EGL_MULTISAMPLE_RESOLVE value */ -#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B /* EGL_MULTISAMPLE_RESOLVE value */ - - /* BindAPI/QueryAPI targets */ -#define EGL_OPENGL_ES_API 0x30A0 -#define EGL_OPENVG_API 0x30A1 -#define EGL_OPENGL_API 0x30A2 - - /* GetCurrentSurface targets */ -#define EGL_DRAW 0x3059 -#define EGL_READ 0x305A - - /* WaitNative engines */ -#define EGL_CORE_NATIVE_ENGINE 0x305B - - /* EGL 1.2 tokens renamed for consistency in EGL 1.3 */ -#define EGL_COLORSPACE EGL_VG_COLORSPACE -#define EGL_ALPHA_FORMAT EGL_VG_ALPHA_FORMAT -#define EGL_COLORSPACE_sRGB EGL_VG_COLORSPACE_sRGB -#define EGL_COLORSPACE_LINEAR EGL_VG_COLORSPACE_LINEAR -#define EGL_ALPHA_FORMAT_NONPRE EGL_VG_ALPHA_FORMAT_NONPRE -#define EGL_ALPHA_FORMAT_PRE EGL_VG_ALPHA_FORMAT_PRE - - /* EGL extensions must request enum blocks from the Khronos - * API Registrar, who maintains the enumerant registry. Submit - * a bug in Khronos Bugzilla against task "Registry". - */ - - - - /* EGL Functions */ - - EGLAPI EGLint EGLAPIENTRY eglGetError(void); - - EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id); - EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor); - EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy); - - EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name); - - EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, - EGLint config_size, EGLint *num_config); - EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, - EGLConfig *configs, EGLint config_size, - EGLint *num_config); - EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, - EGLint attribute, EGLint *value); - - EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, - EGLNativeWindowType win, - const EGLint *attrib_list); - EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, - const EGLint *attrib_list); - EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, - EGLNativePixmapType pixmap, - const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface); - EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface, - EGLint attribute, EGLint *value); - - EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api); - EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void); - - EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void); - - EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void); - - EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer( - EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, - EGLConfig config, const EGLint *attrib_list); - - EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, - EGLint attribute, EGLint value); - EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer); - EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer); - - - EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval); - - - EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config, - EGLContext share_context, - const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx); - EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, - EGLSurface read, EGLContext ctx); - - EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void); - EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw); - EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx, - EGLint attribute, EGLint *value); - - EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void); - EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine); - EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface); - EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, - EGLNativePixmapType target); - - /* This is a generic function pointer type, whose name indicates it must - * be cast to the proper type *and calling convention* before use. - */ - typedef void(*__eglMustCastToProperFunctionPointerType)(void); - - /* Now, define eglGetProcAddress using the generic function ptr. type */ - EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY - eglGetProcAddress(const char *procname); +#ifndef EGL_VERSION_1_5 +#define EGL_VERSION_1_5 1 +typedef void *EGLSync; +typedef intptr_t EGLAttrib; +typedef khronos_utime_nanoseconds_t EGLTime; +typedef void *EGLImage; +#define EGL_CONTEXT_MAJOR_VERSION 0x3098 +#define EGL_CONTEXT_MINOR_VERSION 0x30FB +#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD +#define EGL_NO_RESET_NOTIFICATION 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 +#define EGL_OPENGL_ES3_BIT 0x00000040 +#define EGL_CL_EVENT_HANDLE 0x309C +#define EGL_SYNC_CL_EVENT 0x30FE +#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 +#define EGL_SYNC_TYPE 0x30F7 +#define EGL_SYNC_STATUS 0x30F1 +#define EGL_SYNC_CONDITION 0x30F8 +#define EGL_SIGNALED 0x30F2 +#define EGL_UNSIGNALED 0x30F3 +#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 +#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull +#define EGL_TIMEOUT_EXPIRED 0x30F5 +#define EGL_CONDITION_SATISFIED 0x30F6 +#define EGL_NO_SYNC ((EGLSync)0) +#define EGL_SYNC_FENCE 0x30F9 +#define EGL_GL_COLORSPACE 0x309D +#define EGL_GL_COLORSPACE_SRGB 0x3089 +#define EGL_GL_COLORSPACE_LINEAR 0x308A +#define EGL_GL_RENDERBUFFER 0x30B9 +#define EGL_GL_TEXTURE_2D 0x30B1 +#define EGL_GL_TEXTURE_LEVEL 0x30BC +#define EGL_GL_TEXTURE_3D 0x30B2 +#define EGL_GL_TEXTURE_ZOFFSET 0x30BD +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 +#define EGL_IMAGE_PRESERVED 0x30D2 +#define EGL_NO_IMAGE ((EGLImage)0) +EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync); +EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); +EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); +EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image); +EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags); +#endif /* EGL_VERSION_1_5 */ #ifdef __cplusplus } @@ -809,581 +782,886 @@ extern "C" { - #ifndef __eglext_h_ -#define __eglext_h_ +#define __eglext_h_ 1 #ifdef __cplusplus extern "C" { #endif - /* - ** Copyright (c) 2007-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. - */ +/* +** 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. +*/ +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 31566 $ on $Date: 2015-06-23 08:48:48 -0700 (Tue, 23 Jun 2015) $ +*/ -/* #include */ +/*#include */ - /*************************************************************/ +#define EGL_EGLEXT_VERSION 20150623 - /* Header file version number */ - /* Current version at http://www.khronos.org/registry/egl/ */ - /* $Revision: 21254 $ on $Date: 2013-04-25 03:11:55 -0700 (Thu, 25 Apr 2013) $ */ -#define EGL_EGLEXT_VERSION 16 +/* Generated C header for: + * API: egl + * Versions considered: .* + * Versions emitted: _nomatch_^ + * Default extensions included: egl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef EGL_KHR_cl_event +#define EGL_KHR_cl_event 1 +#define EGL_CL_EVENT_HANDLE_KHR 0x309C +#define EGL_SYNC_CL_EVENT_KHR 0x30FE +#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF +#endif /* EGL_KHR_cl_event */ + +#ifndef EGL_KHR_cl_event2 +#define EGL_KHR_cl_event2 1 +typedef void *EGLSyncKHR; +typedef intptr_t EGLAttribKHR; +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); +#endif +#endif /* EGL_KHR_cl_event2 */ + +#ifndef EGL_KHR_client_get_all_proc_addresses +#define EGL_KHR_client_get_all_proc_addresses 1 +#endif /* EGL_KHR_client_get_all_proc_addresses */ #ifndef EGL_KHR_config_attribs #define EGL_KHR_config_attribs 1 -#define EGL_CONFORMANT_KHR 0x3042 /* EGLConfig attribute */ -#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 /* EGL_SURFACE_TYPE bitfield */ -#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 /* EGL_SURFACE_TYPE bitfield */ -#endif - -#ifndef EGL_KHR_lock_surface -#define EGL_KHR_lock_surface 1 -#define EGL_READ_SURFACE_BIT_KHR 0x0001 /* EGL_LOCK_USAGE_HINT_KHR bitfield */ -#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 /* EGL_LOCK_USAGE_HINT_KHR bitfield */ -#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 /* EGL_SURFACE_TYPE bitfield */ -#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 /* EGL_SURFACE_TYPE bitfield */ -#define EGL_MATCH_FORMAT_KHR 0x3043 /* EGLConfig attribute */ -#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 /* EGL_MATCH_FORMAT_KHR value */ -#define EGL_FORMAT_RGB_565_KHR 0x30C1 /* EGL_MATCH_FORMAT_KHR value */ -#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 /* EGL_MATCH_FORMAT_KHR value */ -#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 /* EGL_MATCH_FORMAT_KHR value */ -#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 /* eglLockSurfaceKHR attribute */ -#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 /* eglLockSurfaceKHR attribute */ -#define EGL_BITMAP_POINTER_KHR 0x30C6 /* eglQuerySurface attribute */ -#define EGL_BITMAP_PITCH_KHR 0x30C7 /* eglQuerySurface attribute */ -#define EGL_BITMAP_ORIGIN_KHR 0x30C8 /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD /* eglQuerySurface attribute */ -#define EGL_LOWER_LEFT_KHR 0x30CE /* EGL_BITMAP_ORIGIN_KHR value */ -#define EGL_UPPER_LEFT_KHR 0x30CF /* EGL_BITMAP_ORIGIN_KHR value */ -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR(EGLDisplay display, EGLSurface surface, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR(EGLDisplay display, EGLSurface surface); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface); -#endif - -#ifndef EGL_KHR_image -#define EGL_KHR_image 1 -#define EGL_NATIVE_PIXMAP_KHR 0x30B0 /* eglCreateImageKHR target */ - typedef void *EGLImageKHR; -#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0) -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLImageKHR(EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); -#endif - -#ifndef EGL_KHR_vg_parent_image -#define EGL_KHR_vg_parent_image 1 -#define EGL_VG_PARENT_IMAGE_KHR 0x30BA /* eglCreateImageKHR target */ -#endif - -#ifndef EGL_KHR_gl_texture_2D_image -#define EGL_KHR_gl_texture_2D_image 1 -#define EGL_GL_TEXTURE_2D_KHR 0x30B1 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC /* eglCreateImageKHR attribute */ -#endif - -#ifndef EGL_KHR_gl_texture_cubemap_image -#define EGL_KHR_gl_texture_cubemap_image 1 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 /* eglCreateImageKHR target */ -#endif - -#ifndef EGL_KHR_gl_texture_3D_image -#define EGL_KHR_gl_texture_3D_image 1 -#define EGL_GL_TEXTURE_3D_KHR 0x30B2 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD /* eglCreateImageKHR attribute */ -#endif - -#ifndef EGL_KHR_gl_renderbuffer_image -#define EGL_KHR_gl_renderbuffer_image 1 -#define EGL_GL_RENDERBUFFER_KHR 0x30B9 /* eglCreateImageKHR target */ -#endif - -#if KHRONOS_SUPPORT_INT64 /* EGLTimeKHR requires 64-bit uint support */ -#ifndef EGL_KHR_reusable_sync -#define EGL_KHR_reusable_sync 1 - - typedef void* EGLSyncKHR; - typedef khronos_utime_nanoseconds_t EGLTimeKHR; - -#define EGL_SYNC_STATUS_KHR 0x30F1 -#define EGL_SIGNALED_KHR 0x30F2 -#define EGL_UNSIGNALED_KHR 0x30F3 -#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 -#define EGL_CONDITION_SATISFIED_KHR 0x30F6 -#define EGL_SYNC_TYPE_KHR 0x30F7 -#define EGL_SYNC_REUSABLE_KHR 0x30FA -#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 /* eglClientWaitSyncKHR bitfield */ -#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull -#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync); - EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); - EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); - EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLSyncKHR(EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); - typedef EGLint(EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); -#endif -#endif - -#ifndef EGL_KHR_image_base -#define EGL_KHR_image_base 1 - /* Most interfaces defined by EGL_KHR_image_pixmap above */ -#define EGL_IMAGE_PRESERVED_KHR 0x30D2 /* eglCreateImageKHR attribute */ -#endif - -#ifndef EGL_KHR_image_pixmap -#define EGL_KHR_image_pixmap 1 - /* Interfaces defined by EGL_KHR_image above */ -#endif - -#ifndef EGL_IMG_context_priority -#define EGL_IMG_context_priority 1 -#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 -#endif - -#ifndef EGL_KHR_lock_surface2 -#define EGL_KHR_lock_surface2 1 -#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 -#endif - -#ifndef EGL_NV_coverage_sample -#define EGL_NV_coverage_sample 1 -#define EGL_COVERAGE_BUFFERS_NV 0x30E0 -#define EGL_COVERAGE_SAMPLES_NV 0x30E1 -#endif - -#ifndef EGL_NV_depth_nonlinear -#define EGL_NV_depth_nonlinear 1 -#define EGL_DEPTH_ENCODING_NV 0x30E2 -#define EGL_DEPTH_ENCODING_NONE_NV 0 -#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 -#endif - -#if KHRONOS_SUPPORT_INT64 /* EGLTimeNV requires 64-bit uint support */ -#ifndef EGL_NV_sync -#define EGL_NV_sync 1 -#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_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 -#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull -#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_NO_SYNC_NV ((EGLSyncNV)0) - typedef void* EGLSyncNV; - typedef khronos_utime_nanoseconds_t EGLTimeNV; -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV(EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV(EGLSyncNV sync); - EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV(EGLSyncNV sync); - EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV(EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); - EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV(EGLSyncNV sync, EGLenum mode); - EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV(EGLSyncNV sync, EGLint attribute, EGLint *value); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLSyncNV(EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync); - typedef EGLint(EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value); -#endif -#endif - -#if KHRONOS_SUPPORT_INT64 /* Dependent on EGL_KHR_reusable_sync which requires 64-bit uint support */ -#ifndef EGL_KHR_fence_sync -#define EGL_KHR_fence_sync 1 - /* Reuses most tokens and entry points from EGL_KHR_reusable_sync */ -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 -#define EGL_SYNC_CONDITION_KHR 0x30F8 -#define EGL_SYNC_FENCE_KHR 0x30F9 -#endif -#endif - -#ifndef EGL_HI_clientpixmap -#define EGL_HI_clientpixmap 1 - - /* Surface Attribute */ -#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 - /* - * Structure representing a client pixmap - * (pixmap's data is in client-space memory). - */ - struct EGLClientPixmapHI - { - void* pData; - EGLint iWidth; - EGLint iHeight; - EGLint iStride; - }; -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI(EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI* pixmap); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLSurface(EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI* pixmap); -#endif /* EGL_HI_clientpixmap */ - -#ifndef EGL_HI_colorformats -#define EGL_HI_colorformats 1 - /* Config Attribute */ -#define EGL_COLOR_FORMAT_HI 0x8F70 - /* Color Formats */ -#define EGL_COLOR_RGB_HI 0x8F71 -#define EGL_COLOR_RGBA_HI 0x8F72 -#define EGL_COLOR_ARGB_HI 0x8F73 -#endif /* EGL_HI_colorformats */ - -#ifndef EGL_MESA_drm_image -#define EGL_MESA_drm_image 1 -#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 /* CreateDRMImageMESA attribute */ -#define EGL_DRM_BUFFER_USE_MESA 0x31D1 /* CreateDRMImageMESA attribute */ -#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 /* EGL_IMAGE_FORMAT_MESA attribute value */ -#define EGL_DRM_BUFFER_MESA 0x31D3 /* eglCreateImageKHR target */ -#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 -#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 /* EGL_DRM_BUFFER_USE_MESA bits */ -#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 /* EGL_DRM_BUFFER_USE_MESA bits */ -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA(EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLImageKHR(EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); -#endif - -#ifndef EGL_NV_post_sub_buffer -#define EGL_NV_post_sub_buffer 1 -#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); -#endif - -#ifndef EGL_ANGLE_query_surface_pointer -#define EGL_ANGLE_query_surface_pointer 1 -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean eglQuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); -#endif - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); -#endif - -#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle -#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 -#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 -#endif - -#ifndef EGL_NV_coverage_sample_resolve -#define EGL_NV_coverage_sample_resolve 1 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 -#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 -#endif - -#if KHRONOS_SUPPORT_INT64 /* EGLuint64NV requires 64-bit uint support */ -#ifndef EGL_NV_system_time -#define EGL_NV_system_time 1 - typedef khronos_utime_nanoseconds_t EGLuint64NV; -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV(void); - EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV(void); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLuint64NV(EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void); - typedef EGLuint64NV(EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void); -#endif -#endif - -#if KHRONOS_SUPPORT_INT64 /* EGLuint64KHR requires 64-bit uint support */ -#ifndef EGL_KHR_stream -#define EGL_KHR_stream 1 - typedef void* EGLStreamKHR; - typedef khronos_uint64_t EGLuint64KHR; -#define EGL_NO_STREAM_KHR ((EGLStreamKHR)0) -#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 -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR(EGLDisplay dpy, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream); - EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLStreamKHR(EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC)(EGLDisplay dpy, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); -#endif -#endif - -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ -#ifndef EGL_KHR_stream_consumer_gltexture -#define EGL_KHR_stream_consumer_gltexture 1 -#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EGLStreamKHR stream); - EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR stream); - EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR stream); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); -#endif -#endif - -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ -#ifndef EGL_KHR_stream_producer_eglsurface -#define EGL_KHR_stream_producer_eglsurface 1 -#define EGL_STREAM_BIT_KHR 0x0800 -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLSurface(EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); -#endif -#endif - -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ -#ifndef EGL_KHR_stream_producer_aldatalocator -#define EGL_KHR_stream_producer_aldatalocator 1 -#endif -#endif - -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ -#ifndef EGL_KHR_stream_fifo -#define EGL_KHR_stream_fifo 1 - /* reuse EGLTimeKHR */ -#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 -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); -#endif -#endif - -#ifndef EGL_EXT_create_context_robustness -#define EGL_EXT_create_context_robustness 1 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 -#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF -#endif - -#ifndef EGL_ANGLE_d3d_share_handle_client_buffer -#define EGL_ANGLE_d3d_share_handle_client_buffer 1 - /* reuse EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE */ -#endif +#define EGL_CONFORMANT_KHR 0x3042 +#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 +#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 +#endif /* EGL_KHR_config_attribs */ #ifndef EGL_KHR_create_context #define EGL_KHR_create_context 1 -#define EGL_CONTEXT_MAJOR_VERSION_KHR EGL_CONTEXT_CLIENT_VERSION -#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB -#define EGL_CONTEXT_FLAGS_KHR 0x30FC -#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD -#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF -#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 -#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 +#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 +#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB +#define EGL_CONTEXT_FLAGS_KHR 0x30FC +#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD +#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF +#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 +#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 +#endif /* EGL_KHR_create_context */ + +#ifndef EGL_KHR_create_context_no_error +#define EGL_KHR_create_context_no_error 1 +#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3 +#endif /* EGL_KHR_create_context_no_error */ + +#ifndef EGL_KHR_fence_sync +#define EGL_KHR_fence_sync 1 +typedef khronos_utime_nanoseconds_t EGLTimeKHR; +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 +#define EGL_SYNC_CONDITION_KHR 0x30F8 +#define EGL_SYNC_FENCE_KHR 0x30F9 +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); +typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync); +EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); +EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); #endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_fence_sync */ + +#ifndef EGL_KHR_get_all_proc_addresses +#define EGL_KHR_get_all_proc_addresses 1 +#endif /* EGL_KHR_get_all_proc_addresses */ + +#ifndef EGL_KHR_gl_colorspace +#define EGL_KHR_gl_colorspace 1 +#define EGL_GL_COLORSPACE_KHR 0x309D +#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 +#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A +#endif /* EGL_KHR_gl_colorspace */ + +#ifndef EGL_KHR_gl_renderbuffer_image +#define EGL_KHR_gl_renderbuffer_image 1 +#define EGL_GL_RENDERBUFFER_KHR 0x30B9 +#endif /* EGL_KHR_gl_renderbuffer_image */ + +#ifndef EGL_KHR_gl_texture_2D_image +#define EGL_KHR_gl_texture_2D_image 1 +#define EGL_GL_TEXTURE_2D_KHR 0x30B1 +#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC +#endif /* EGL_KHR_gl_texture_2D_image */ + +#ifndef EGL_KHR_gl_texture_3D_image +#define EGL_KHR_gl_texture_3D_image 1 +#define EGL_GL_TEXTURE_3D_KHR 0x30B2 +#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD +#endif /* EGL_KHR_gl_texture_3D_image */ + +#ifndef EGL_KHR_gl_texture_cubemap_image +#define EGL_KHR_gl_texture_cubemap_image 1 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 +#endif /* EGL_KHR_gl_texture_cubemap_image */ + +#ifndef EGL_KHR_image +#define EGL_KHR_image 1 +typedef void *EGLImageKHR; +#define EGL_NATIVE_PIXMAP_KHR 0x30B0 +#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0) +typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image); +#endif +#endif /* EGL_KHR_image */ + +#ifndef EGL_KHR_image_base +#define EGL_KHR_image_base 1 +#define EGL_IMAGE_PRESERVED_KHR 0x30D2 +#endif /* EGL_KHR_image_base */ + +#ifndef EGL_KHR_image_pixmap +#define EGL_KHR_image_pixmap 1 +#endif /* EGL_KHR_image_pixmap */ + +#ifndef EGL_KHR_lock_surface +#define EGL_KHR_lock_surface 1 +#define EGL_READ_SURFACE_BIT_KHR 0x0001 +#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 +#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 +#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 +#define EGL_MATCH_FORMAT_KHR 0x3043 +#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 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface); +#endif +#endif /* EGL_KHR_lock_surface */ + +#ifndef EGL_KHR_lock_surface2 +#define EGL_KHR_lock_surface2 1 +#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 +#endif /* EGL_KHR_lock_surface2 */ + +#ifndef EGL_KHR_lock_surface3 +#define EGL_KHR_lock_surface3 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); +#endif +#endif /* EGL_KHR_lock_surface3 */ + +#ifndef EGL_KHR_partial_update +#define EGL_KHR_partial_update 1 +#define EGL_BUFFER_AGE_KHR 0x313D +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); +#endif +#endif /* EGL_KHR_partial_update */ + +#ifndef EGL_KHR_platform_android +#define EGL_KHR_platform_android 1 +#define EGL_PLATFORM_ANDROID_KHR 0x3141 +#endif /* EGL_KHR_platform_android */ + +#ifndef EGL_KHR_platform_gbm +#define EGL_KHR_platform_gbm 1 +#define EGL_PLATFORM_GBM_KHR 0x31D7 +#endif /* EGL_KHR_platform_gbm */ + +#ifndef EGL_KHR_platform_wayland +#define EGL_KHR_platform_wayland 1 +#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 +#endif /* EGL_KHR_platform_wayland */ + +#ifndef EGL_KHR_platform_x11 +#define EGL_KHR_platform_x11 1 +#define EGL_PLATFORM_X11_KHR 0x31D5 +#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 +#endif /* EGL_KHR_platform_x11 */ + +#ifndef EGL_KHR_reusable_sync +#define EGL_KHR_reusable_sync 1 +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_SYNC_STATUS_KHR 0x30F1 +#define EGL_SIGNALED_KHR 0x30F2 +#define EGL_UNSIGNALED_KHR 0x30F3 +#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 +#define EGL_CONDITION_SATISFIED_KHR 0x30F6 +#define EGL_SYNC_TYPE_KHR 0x30F7 +#define EGL_SYNC_REUSABLE_KHR 0x30FA +#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 +#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull +#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_reusable_sync */ + +#ifndef EGL_KHR_stream +#define EGL_KHR_stream 1 +typedef void *EGLStreamKHR; +typedef khronos_uint64_t EGLuint64KHR; +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_NO_STREAM_KHR ((EGLStreamKHR)0) +#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 +typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_stream */ + +#ifndef EGL_KHR_stream_consumer_gltexture +#define EGL_KHR_stream_consumer_gltexture 1 +#ifdef EGL_KHR_stream +#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream); +#endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_consumer_gltexture */ + +#ifndef EGL_KHR_stream_cross_process_fd +#define EGL_KHR_stream_cross_process_fd 1 +typedef int EGLNativeFileDescriptorKHR; +#ifdef EGL_KHR_stream +#define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1)) +typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); +#endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_cross_process_fd */ + +#ifndef EGL_KHR_stream_fifo +#define EGL_KHR_stream_fifo 1 +#ifdef EGL_KHR_stream +#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 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); +#endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_fifo */ + +#ifndef EGL_KHR_stream_producer_aldatalocator +#define EGL_KHR_stream_producer_aldatalocator 1 +#ifdef EGL_KHR_stream +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_producer_aldatalocator */ + +#ifndef EGL_KHR_stream_producer_eglsurface +#define EGL_KHR_stream_producer_eglsurface 1 +#ifdef EGL_KHR_stream +#define EGL_STREAM_BIT_KHR 0x0800 +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); +#endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_producer_eglsurface */ #ifndef EGL_KHR_surfaceless_context #define EGL_KHR_surfaceless_context 1 - /* No tokens/entry points, just relaxes an error condition */ -#endif +#endif /* EGL_KHR_surfaceless_context */ -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ -#ifndef EGL_KHR_stream_cross_process_fd -#define EGL_KHR_stream_cross_process_fd 1 - typedef int EGLNativeFileDescriptorKHR; -#define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1)) +#ifndef EGL_KHR_swap_buffers_with_damage +#define EGL_KHR_swap_buffers_with_damage 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR(EGLDisplay dpy, EGLStreamKHR stream); - EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLNativeFileDescriptorKHR(EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); - typedef EGLStreamKHR(EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); -#endif +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #endif +#endif /* EGL_KHR_swap_buffers_with_damage */ -#ifndef EGL_EXT_multiview_window -#define EGL_EXT_multiview_window 1 -#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 -#endif +#ifndef EGL_KHR_vg_parent_image +#define EGL_KHR_vg_parent_image 1 +#define EGL_VG_PARENT_IMAGE_KHR 0x30BA +#endif /* EGL_KHR_vg_parent_image */ #ifndef EGL_KHR_wait_sync #define EGL_KHR_wait_sync 1 +typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLint(EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); -#endif - -#ifndef EGL_NV_post_convert_rounding -#define EGL_NV_post_convert_rounding 1 - /* No tokens or entry points, just relaxes behavior of SwapBuffers */ -#endif - -#ifndef EGL_NV_native_query -#define EGL_NV_native_query 1 -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV(EGLDisplay dpy, EGLNativeDisplayType* display_id); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV(EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType* window); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV(EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType* pixmap); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC)(EGLDisplay dpy, EGLNativeDisplayType *display_id); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); -#endif - -#ifndef EGL_NV_3dvision_surface -#define EGL_NV_3dvision_surface 1 -#define EGL_AUTO_STEREO_NV 0x3136 -#endif - -#ifndef EGL_ANDROID_framebuffer_target -#define EGL_ANDROID_framebuffer_target 1 -#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 +EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); #endif +#endif /* EGL_KHR_wait_sync */ #ifndef EGL_ANDROID_blob_cache #define EGL_ANDROID_blob_cache 1 - 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); +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); +typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC)(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); +EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); #endif +#endif /* EGL_ANDROID_blob_cache */ + +#ifndef EGL_ANDROID_framebuffer_target +#define EGL_ANDROID_framebuffer_target 1 +#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 +#endif /* EGL_ANDROID_framebuffer_target */ #ifndef EGL_ANDROID_image_native_buffer #define EGL_ANDROID_image_native_buffer 1 -#define EGL_NATIVE_BUFFER_ANDROID 0x3140 -#endif +#define EGL_NATIVE_BUFFER_ANDROID 0x3140 +#endif /* EGL_ANDROID_image_native_buffer */ #ifndef EGL_ANDROID_native_fence_sync #define EGL_ANDROID_native_fence_sync 1 -#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_NO_NATIVE_FENCE_FD_ANDROID -1 +#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_NO_NATIVE_FENCE_FD_ANDROID -1 +typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID(EGLDisplay dpy, EGLSyncKHR); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLint(EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC)(EGLDisplay dpy, EGLSyncKHR); +EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync); #endif +#endif /* EGL_ANDROID_native_fence_sync */ #ifndef EGL_ANDROID_recordable #define EGL_ANDROID_recordable 1 -#define EGL_RECORDABLE_ANDROID 0x3142 -#endif +#define EGL_RECORDABLE_ANDROID 0x3142 +#endif /* EGL_ANDROID_recordable */ -#ifndef EGL_EXT_buffer_age -#define EGL_EXT_buffer_age 1 -#define EGL_BUFFER_AGE_EXT 0x313D -#endif +#ifndef EGL_ANGLE_d3d_share_handle_client_buffer +#define EGL_ANGLE_d3d_share_handle_client_buffer 1 +#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 +#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */ -#ifndef EGL_EXT_image_dma_buf_import -#define EGL_EXT_image_dma_buf_import 1 -#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 +#ifndef EGL_ANGLE_device_d3d +#define EGL_ANGLE_device_d3d 1 +#define EGL_D3D9_DEVICE_ANGLE 0x33A0 +#define EGL_D3D11_DEVICE_ANGLE 0x33A1 +#endif /* EGL_ANGLE_device_d3d */ + +#ifndef EGL_ANGLE_query_surface_pointer +#define EGL_ANGLE_query_surface_pointer 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); #endif +#endif /* EGL_ANGLE_query_surface_pointer */ + +#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle +#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 +#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */ + +#ifndef EGL_ANGLE_window_fixed_size +#define EGL_ANGLE_window_fixed_size 1 +#define EGL_FIXED_SIZE_ANGLE 0x3201 +#endif /* EGL_ANGLE_window_fixed_size */ #ifndef EGL_ARM_pixmap_multisample_discard #define EGL_ARM_pixmap_multisample_discard 1 -#define EGL_DISCARD_SAMPLES_ARM 0x3286 +#define EGL_DISCARD_SAMPLES_ARM 0x3286 +#endif /* EGL_ARM_pixmap_multisample_discard */ + +#ifndef EGL_EXT_buffer_age +#define EGL_EXT_buffer_age 1 +#define EGL_BUFFER_AGE_EXT 0x313D +#endif /* EGL_EXT_buffer_age */ + +#ifndef EGL_EXT_client_extensions +#define EGL_EXT_client_extensions 1 +#endif /* EGL_EXT_client_extensions */ + +#ifndef EGL_EXT_create_context_robustness +#define EGL_EXT_create_context_robustness 1 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 +#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF +#endif /* EGL_EXT_create_context_robustness */ + +#ifndef EGL_EXT_device_base +#define EGL_EXT_device_base 1 +typedef void *EGLDeviceEXT; +#define EGL_NO_DEVICE_EXT ((EGLDeviceEXT)(0)) +#define EGL_BAD_DEVICE_EXT 0x322B +#define EGL_DEVICE_EXT 0x322C +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); +EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); #endif +#endif /* EGL_EXT_device_base */ + +#ifndef EGL_EXT_device_drm +#define EGL_EXT_device_drm 1 +#define EGL_DRM_DEVICE_FILE_EXT 0x3233 +#endif /* EGL_EXT_device_drm */ + +#ifndef EGL_EXT_device_enumeration +#define EGL_EXT_device_enumeration 1 +#endif /* EGL_EXT_device_enumeration */ + +#ifndef EGL_EXT_device_openwf +#define EGL_EXT_device_openwf 1 +#define EGL_OPENWF_DEVICE_ID_EXT 0x3237 +#endif /* EGL_EXT_device_openwf */ + +#ifndef EGL_EXT_device_query +#define EGL_EXT_device_query 1 +#endif /* EGL_EXT_device_query */ + +#ifndef EGL_EXT_image_dma_buf_import +#define EGL_EXT_image_dma_buf_import 1 +#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 +#endif /* EGL_EXT_image_dma_buf_import */ + +#ifndef EGL_EXT_multiview_window +#define EGL_EXT_multiview_window 1 +#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 +#endif /* EGL_EXT_multiview_window */ + +#ifndef EGL_EXT_output_base +#define EGL_EXT_output_base 1 +typedef void *EGLOutputLayerEXT; +typedef void *EGLOutputPortEXT; +#define EGL_NO_OUTPUT_LAYER_EXT ((EGLOutputLayerEXT)0) +#define EGL_NO_OUTPUT_PORT_EXT ((EGLOutputPortEXT)0) +#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D +#define EGL_BAD_OUTPUT_PORT_EXT 0x322E +#define EGL_SWAP_INTERVAL_EXT 0x322F +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); +EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); +EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); +EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); +EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); +#endif +#endif /* EGL_EXT_output_base */ + +#ifndef EGL_EXT_output_drm +#define EGL_EXT_output_drm 1 +#define EGL_DRM_CRTC_EXT 0x3234 +#define EGL_DRM_PLANE_EXT 0x3235 +#define EGL_DRM_CONNECTOR_EXT 0x3236 +#endif /* EGL_EXT_output_drm */ + +#ifndef EGL_EXT_output_openwf +#define EGL_EXT_output_openwf 1 +#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238 +#define EGL_OPENWF_PORT_ID_EXT 0x3239 +#endif /* EGL_EXT_output_openwf */ + +#ifndef EGL_EXT_platform_base +#define EGL_EXT_platform_base 1 +typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); +#endif +#endif /* EGL_EXT_platform_base */ + +#ifndef EGL_EXT_platform_device +#define EGL_EXT_platform_device 1 +#define EGL_PLATFORM_DEVICE_EXT 0x313F +#endif /* EGL_EXT_platform_device */ + +#ifndef EGL_EXT_platform_wayland +#define EGL_EXT_platform_wayland 1 +#define EGL_PLATFORM_WAYLAND_EXT 0x31D8 +#endif /* EGL_EXT_platform_wayland */ + +#ifndef EGL_EXT_platform_x11 +#define EGL_EXT_platform_x11 1 +#define EGL_PLATFORM_X11_EXT 0x31D5 +#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 +#endif /* EGL_EXT_platform_x11 */ + +#ifndef EGL_EXT_protected_surface +#define EGL_EXT_protected_surface 1 +#define EGL_PROTECTED_CONTENT_EXT 0x32C0 +#endif /* EGL_EXT_protected_surface */ + +#ifndef EGL_EXT_stream_consumer_egloutput +#define EGL_EXT_stream_consumer_egloutput 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); +#endif +#endif /* EGL_EXT_stream_consumer_egloutput */ #ifndef EGL_EXT_swap_buffers_with_damage #define EGL_EXT_swap_buffers_with_damage 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC)(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #endif +#endif /* EGL_EXT_swap_buffers_with_damage */ -/* #include */ +#ifndef EGL_EXT_yuv_surface +#define EGL_EXT_yuv_surface 1 +#define EGL_YUV_ORDER_EXT 0x3301 +#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311 +#define EGL_YUV_SUBSAMPLE_EXT 0x3312 +#define EGL_YUV_DEPTH_RANGE_EXT 0x3317 +#define EGL_YUV_CSC_STANDARD_EXT 0x330A +#define EGL_YUV_PLANE_BPP_EXT 0x331A +#define EGL_YUV_BUFFER_EXT 0x3300 +#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_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_LIMITED_EXT 0x3318 +#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319 +#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_PLANE_BPP_0_EXT 0x331B +#define EGL_YUV_PLANE_BPP_8_EXT 0x331C +#define EGL_YUV_PLANE_BPP_10_EXT 0x331D +#endif /* EGL_EXT_yuv_surface */ + +#ifndef EGL_HI_clientpixmap +#define EGL_HI_clientpixmap 1 +struct EGLClientPixmapHI { + void *pData; + EGLint iWidth; + EGLint iHeight; + EGLint iStride; +}; +#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); +#endif +#endif /* EGL_HI_clientpixmap */ + +#ifndef EGL_HI_colorformats +#define EGL_HI_colorformats 1 +#define EGL_COLOR_FORMAT_HI 0x8F70 +#define EGL_COLOR_RGB_HI 0x8F71 +#define EGL_COLOR_RGBA_HI 0x8F72 +#define EGL_COLOR_ARGB_HI 0x8F73 +#endif /* EGL_HI_colorformats */ + +#ifndef EGL_IMG_context_priority +#define EGL_IMG_context_priority 1 +#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 +#endif /* EGL_IMG_context_priority */ + +#ifndef EGL_MESA_drm_image +#define EGL_MESA_drm_image 1 +#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_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 +#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 +typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); +#endif +#endif /* EGL_MESA_drm_image */ + +#ifndef EGL_MESA_image_dma_buf_export +#define EGL_MESA_image_dma_buf_export 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); +EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); +#endif +#endif /* EGL_MESA_image_dma_buf_export */ + +#ifndef EGL_MESA_platform_gbm +#define EGL_MESA_platform_gbm 1 +#define EGL_PLATFORM_GBM_MESA 0x31D7 +#endif /* EGL_MESA_platform_gbm */ + +#ifndef EGL_NOK_swap_region +#define EGL_NOK_swap_region 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#endif +#endif /* EGL_NOK_swap_region */ + +#ifndef EGL_NOK_swap_region2 +#define EGL_NOK_swap_region2 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#endif +#endif /* EGL_NOK_swap_region2 */ + +#ifndef EGL_NOK_texture_from_pixmap +#define EGL_NOK_texture_from_pixmap 1 +#define EGL_Y_INVERTED_NOK 0x307F +#endif /* EGL_NOK_texture_from_pixmap */ + +#ifndef EGL_NV_3dvision_surface +#define EGL_NV_3dvision_surface 1 +#define EGL_AUTO_STEREO_NV 0x3136 +#endif /* EGL_NV_3dvision_surface */ + +#ifndef EGL_NV_coverage_sample +#define EGL_NV_coverage_sample 1 +#define EGL_COVERAGE_BUFFERS_NV 0x30E0 +#define EGL_COVERAGE_SAMPLES_NV 0x30E1 +#endif /* EGL_NV_coverage_sample */ + +#ifndef EGL_NV_coverage_sample_resolve +#define EGL_NV_coverage_sample_resolve 1 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 +#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 +#endif /* EGL_NV_coverage_sample_resolve */ + +#ifndef EGL_NV_cuda_event +#define EGL_NV_cuda_event 1 +#define EGL_CUDA_EVENT_HANDLE_NV 0x323B +#define EGL_SYNC_CUDA_EVENT_NV 0x323C +#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D +#endif /* EGL_NV_cuda_event */ + +#ifndef EGL_NV_depth_nonlinear +#define EGL_NV_depth_nonlinear 1 +#define EGL_DEPTH_ENCODING_NV 0x30E2 +#define EGL_DEPTH_ENCODING_NONE_NV 0 +#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 +#endif /* EGL_NV_depth_nonlinear */ + +#ifndef EGL_NV_device_cuda +#define EGL_NV_device_cuda 1 +#define EGL_CUDA_DEVICE_NV 0x323A +#endif /* EGL_NV_device_cuda */ + +#ifndef EGL_NV_native_query +#define EGL_NV_native_query 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); +#endif +#endif /* EGL_NV_native_query */ + +#ifndef EGL_NV_post_convert_rounding +#define EGL_NV_post_convert_rounding 1 +#endif /* EGL_NV_post_convert_rounding */ + +#ifndef EGL_NV_post_sub_buffer +#define EGL_NV_post_sub_buffer 1 +#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE +typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); +#endif +#endif /* EGL_NV_post_sub_buffer */ + +#ifndef EGL_NV_stream_sync +#define EGL_NV_stream_sync 1 +#define EGL_SYNC_NEW_FRAME_NV 0x321F +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); +#endif +#endif /* EGL_NV_stream_sync */ + +#ifndef EGL_NV_sync +#define EGL_NV_sync 1 +typedef void *EGLSyncNV; +typedef khronos_utime_nanoseconds_t EGLTimeNV; +#ifdef KHRONOS_SUPPORT_INT64 +#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_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 +#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull +#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_NO_SYNC_NV ((EGLSyncNV)0) +typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync); +typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync); +EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync); +EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); +EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode); +EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_NV_sync */ + +#ifndef EGL_NV_system_time +#define EGL_NV_system_time 1 +typedef khronos_utime_nanoseconds_t EGLuint64NV; +#ifdef KHRONOS_SUPPORT_INT64 +typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void); +typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void); +EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_NV_system_time */ + +#ifndef EGL_TIZEN_image_native_buffer +#define EGL_TIZEN_image_native_buffer 1 +#define EGL_NATIVE_BUFFER_TIZEN 0x32A0 +#endif /* EGL_TIZEN_image_native_buffer */ + +#ifndef EGL_TIZEN_image_native_surface +#define EGL_TIZEN_image_native_surface 1 +#define EGL_NATIVE_SURFACE_TIZEN 0x32A1 +#endif /* EGL_TIZEN_image_native_surface */ #ifdef __cplusplus } @@ -1392,5 +1670,4 @@ extern "C" { #endif /* __eglext_h_ */ - #endif /* _MSC_VER */ diff --git a/code/SDL2/include/SDL_endian.h b/code/SDL2/include/SDL_endian.h index 161c418d..9100b103 100644 --- a/code/SDL2/include/SDL_endian.h +++ b/code/SDL2/include/SDL_endian.h @@ -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 @@ -42,7 +42,7 @@ #ifdef __linux__ #include #define SDL_BYTEORDER __BYTE_ORDER -#else /* __linux __ */ +#else /* __linux__ */ #if defined(__hppa__) || \ defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ (defined(__MIPS__) && defined(__MISPEB__)) || \ @@ -52,7 +52,7 @@ #else #define SDL_BYTEORDER SDL_LIL_ENDIAN #endif -#endif /* __linux __ */ +#endif /* __linux__ */ #endif /* !SDL_BYTEORDER */ diff --git a/code/SDL2/include/SDL_error.h b/code/SDL2/include/SDL_error.h index 5776cfa2..2f3b4b50 100644 --- a/code/SDL2/include/SDL_error.h +++ b/code/SDL2/include/SDL_error.h @@ -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 @@ -38,7 +38,7 @@ extern "C" { /* Public functions */ /* SDL_SetError() unconditionally returns -1. */ -extern DECLSPEC int SDLCALL SDL_SetError(const char *fmt, ...); +extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); extern DECLSPEC const char *SDLCALL SDL_GetError(void); extern DECLSPEC void SDLCALL SDL_ClearError(void); diff --git a/code/SDL2/include/SDL_events.h b/code/SDL2/include/SDL_events.h index fc5a145e..1437f4c7 100644 --- a/code/SDL2/include/SDL_events.h +++ b/code/SDL2/include/SDL_events.h @@ -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 @@ -59,7 +59,7 @@ typedef enum /* Application events */ SDL_QUIT = 0x100, /**< User-requested quit */ - /* These application events have special meaning on iOS, see README-ios.txt for details */ + /* These application events have special meaning on iOS, see README-ios.md for details */ SDL_APP_TERMINATING, /**< The application is being terminated by the OS Called on iOS in applicationWillTerminate() Called on Android in onDestroy() @@ -94,6 +94,9 @@ typedef enum SDL_KEYUP, /**< Key released */ SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ SDL_TEXTINPUT, /**< Keyboard text input */ + SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an + input language or keyboard layout change. + */ /* Mouse events */ SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ @@ -134,8 +137,13 @@ typedef enum /* Drag and drop events */ SDL_DROPFILE = 0x1000, /**< The system requests a file open */ + /* Audio hotplug events */ + SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ + SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */ + /* Render events */ - SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset */ + SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ + SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, * and should be allocated with SDL_RegisterEvents() @@ -259,6 +267,7 @@ typedef struct SDL_MouseWheelEvent Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */ + Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ } SDL_MouseWheelEvent; /** @@ -380,6 +389,20 @@ typedef struct SDL_ControllerDeviceEvent Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ } SDL_ControllerDeviceEvent; +/** + * \brief Audio device event structure (event.adevice.*) + */ +typedef struct SDL_AudioDeviceEvent +{ + Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ + Uint32 timestamp; + Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ + Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; +} SDL_AudioDeviceEvent; + /** * \brief Touch finger event structure (event.tfinger.*) @@ -392,8 +415,8 @@ typedef struct SDL_TouchFingerEvent SDL_FingerID fingerId; float x; /**< Normalized in the range 0...1 */ float y; /**< Normalized in the range 0...1 */ - float dx; /**< Normalized in the range 0...1 */ - float dy; /**< Normalized in the range 0...1 */ + float dx; /**< Normalized in the range -1...1 */ + float dy; /**< Normalized in the range -1...1 */ float pressure; /**< Normalized in the range 0...1 */ } SDL_TouchFingerEvent; @@ -420,7 +443,7 @@ typedef struct SDL_MultiGestureEvent */ typedef struct SDL_DollarGestureEvent { - Uint32 type; /**< ::SDL_DOLLARGESTURE */ + Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ Uint32 timestamp; SDL_TouchID touchId; /**< The touch device id */ SDL_GestureID gestureId; @@ -433,8 +456,8 @@ typedef struct SDL_DollarGestureEvent /** * \brief An event used to request a file open by the system (event.drop.*) - * This event is disabled by default, you can enable it with SDL_EventState() - * \note If you enable this event, you must free the filename in the event. + * This event is enabled by default, you can disable it with SDL_EventState(). + * \note If this event is enabled, you must free the filename in the event. */ typedef struct SDL_DropEvent { @@ -514,6 +537,7 @@ typedef union SDL_Event SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ + SDL_AudioDeviceEvent adevice; /**< Audio device event data */ SDL_QuitEvent quit; /**< Quit request event data */ SDL_UserEvent user; /**< Custom event data */ SDL_SysWMEvent syswm; /**< System dependent window event data */ @@ -583,6 +607,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); /** * This function clears events from the event queue + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. */ extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); diff --git a/code/SDL2/include/SDL_filesystem.h b/code/SDL2/include/SDL_filesystem.h index de3e227d..02999ed2 100644 --- a/code/SDL2/include/SDL_filesystem.h +++ b/code/SDL2/include/SDL_filesystem.h @@ -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 @@ -131,6 +131,6 @@ extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); #endif #include "close_code.h" -#endif /* _SDL_system_h */ +#endif /* _SDL_filesystem_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/code/SDL2/include/SDL_gamecontroller.h b/code/SDL2/include/SDL_gamecontroller.h index b00ad713..42087eea 100644 --- a/code/SDL2/include/SDL_gamecontroller.h +++ b/code/SDL2/include/SDL_gamecontroller.h @@ -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 @@ -43,7 +43,7 @@ extern "C" { * \file SDL_gamecontroller.h * * In order to use these functions, SDL_Init() must have been called - * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * with the ::SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system * for game controllers, and load appropriate drivers. * * If you would like to receive controller updates while the application @@ -163,13 +163,19 @@ extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_ /** * Open a game controller for use. * The index passed as an argument refers to the N'th game controller on the system. - * This index is the value which will identify this controller in future controller - * events. + * This index is not the value which will identify this controller in future + * controller events. The joystick's instance id (::SDL_JoystickID) will be + * used there instead. * * \return A controller identifier, or NULL if an error occurred. */ extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); +/** + * Return the SDL_GameController associated with an instance id. + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); + /** * Return the name for this currently opened controller */ @@ -241,7 +247,8 @@ SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, /** * Get the current state of an axis control on a game controller. * - * The state is a value ranging from -32768 to 32767. + * The state is a value ranging from -32768 to 32767 (except for the triggers, + * which range from 0 to 32767). * * The axis indices start at index 0. */ diff --git a/code/SDL2/include/SDL_gesture.h b/code/SDL2/include/SDL_gesture.h index dbc16924..3c29ca7a 100644 --- a/code/SDL2/include/SDL_gesture.h +++ b/code/SDL2/include/SDL_gesture.h @@ -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/code/SDL2/include/SDL_haptic.h b/code/SDL2/include/SDL_haptic.h index 234975ab..b36d78b1 100644 --- a/code/SDL2/include/SDL_haptic.h +++ b/code/SDL2/include/SDL_haptic.h @@ -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 @@ -102,11 +102,6 @@ * return 0; // Success * } * \endcode - * - * You can also find out more information on my blog: - * http://bobbens.dyndns.org/journal/2010/sdl_haptic/ - * - * \author Edgar Simo Serra */ #ifndef _SDL_haptic_h @@ -347,6 +342,9 @@ typedef struct _SDL_Haptic SDL_Haptic; /** * \brief Structure that represents a haptic direction. * + * This is the direction where the force comes from, + * instead of the direction in which the force is exerted. + * * Directions can be specified by: * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. @@ -370,7 +368,7 @@ typedef struct _SDL_Haptic SDL_Haptic; ^ | | - (1,0) West <----[ HAPTIC ]----> East (-1,0) + (-1,0) West <----[ HAPTIC ]----> East (1,0) | | v @@ -395,9 +393,9 @@ typedef struct _SDL_Haptic SDL_Haptic; * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses * the first three \c dir parameters. The cardinal directions would be: * - North: 0,-1, 0 - * - East: -1, 0, 0 + * - East: 1, 0, 0 * - South: 0, 1, 0 - * - West: 1, 0, 0 + * - West: -1, 0, 0 * * The Z axis represents the height of the effect if supported, otherwise * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you @@ -492,7 +490,7 @@ typedef struct SDL_HapticConstant * over time. The type determines the shape of the wave and the parameters * determine the dimensions of the wave. * - * Phase is given by hundredth of a cycle meaning that giving the phase a value + * Phase is given by hundredth of a degree meaning that giving the phase a value * of 9000 will displace it 25% of its period. Here are sample values: * - 0: No phase displacement. * - 9000: Displaced 25% of its period. @@ -553,9 +551,9 @@ typedef struct SDL_HapticPeriodic /* Periodic */ Uint16 period; /**< Period of the wave. */ - Sint16 magnitude; /**< Peak value. */ + Sint16 magnitude; /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */ Sint16 offset; /**< Mean value of the wave. */ - Uint16 phase; /**< Horizontal shift given by hundredth of a cycle. */ + Uint16 phase; /**< Positive phase shift given by hundredth of a degree. */ /* Envelope */ Uint16 attack_length; /**< Duration of the attack. */ @@ -604,11 +602,11 @@ typedef struct SDL_HapticCondition Uint16 interval; /**< How soon it can be triggered again after button. */ /* Condition */ - Uint16 right_sat[3]; /**< Level when joystick is to the positive side. */ - Uint16 left_sat[3]; /**< Level when joystick is to the negative side. */ + Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */ + Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */ Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ - Uint16 deadband[3]; /**< Size of the dead zone. */ + Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */ Sint16 center[3]; /**< Position of the dead zone. */ } SDL_HapticCondition; @@ -897,7 +895,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); /** * \brief Opens a Haptic device for usage from a Joystick device. * - * You must still close the haptic device seperately. It will not be closed + * You must still close the haptic device separately. It will not be closed * with the joystick. * * When opening from a joystick you should first close the haptic device before @@ -954,7 +952,7 @@ extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); /** - * \brief Gets the haptic devices supported features in bitwise matter. + * \brief Gets the haptic device's supported features in bitwise manner. * * Example: * \code @@ -1148,7 +1146,7 @@ extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); * * Call to unpause after SDL_HapticPause(). * - * \param haptic Haptic device to pause. + * \param haptic Haptic device to unpause. * \return 0 on success or -1 on error. * * \sa SDL_HapticPause diff --git a/code/SDL2/include/SDL_hints.h b/code/SDL2/include/SDL_hints.h index b98ce683..3bd5435f 100644 --- a/code/SDL2/include/SDL_hints.h +++ b/code/SDL2/include/SDL_hints.h @@ -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 @@ -116,7 +116,7 @@ extern "C" { * * By default, SDL does not use Direct3D Debug Layer. */ -#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_HINT_RENDER_DIRECT3D11_DEBUG" +#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" /** * \brief A variable controlling the scaling quality @@ -185,6 +185,42 @@ extern "C" { */ #define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" +/** + * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported. + * + * This variable can be set to the following values: + * "0" - Disable _NET_WM_PING + * "1" - Enable _NET_WM_PING + * + * By default SDL will use _NET_WM_PING, but for applications that know they + * will not always be able to respond to ping requests in a timely manner they can + * turn it off to avoid the window manager thinking the app is hung. + * The hint is checked in CreateWindow. + */ +#define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING" + +/** + * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden + * + * This variable can be set to the following values: + * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc) + * "1" - The window frame is interactive when the cursor is hidden + * + * By default SDL will allow interaction with the window frame when the cursor is hidden + */ +#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" + +/** + * \brief A variable controlling whether the windows message loop is processed by SDL + * + * This variable can be set to the following values: + * "0" - The window message loop is not run + * "1" - The window message loop is processed in SDL_PumpEvents() + * + * By default SDL will process the windows message loop + */ +#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" + /** * \brief A variable controlling whether grabbing input grabs the keyboard * @@ -221,6 +257,9 @@ extern "C" { * this is problematic. This functionality can be disabled by setting this * hint. * + * As of SDL 2.0.4, SDL_EnableScreenSaver and SDL_DisableScreenSaver accomplish + * the same thing on iOS. They should be preferred over this hint. + * * This variable can be set to the following values: * "0" - Enable idle timer * "1" - Disable idle timer @@ -239,8 +278,9 @@ extern "C" { #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" /** - * \brief A variable controlling whether an Android built-in accelerometer should be - * listed as a joystick device, rather than listing actual joysticks only. + * \brief A variable controlling whether the Android / iOS built-in + * accelerometer should be listed as a joystick device, rather than listing + * actual joysticks only. * * This variable can be set to the following values: * "0" - List only real joysticks and accept input from them @@ -259,6 +299,16 @@ extern "C" { #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" +/** + * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices. + * + * This hint is for backwards compatibility only and will be removed in SDL 2.1 + * + * The default value is "0". This hint must be set before SDL_Init() + */ +#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" + + /** * \brief A variable that lets you manually hint extra gamecontroller db entries * @@ -285,7 +335,7 @@ extern "C" { /** - * \brief If set to 0 then never set the top most bit on a SDL Window, even if the video mode expects it. + * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. * This is a debugging aid for developers and not expected to be used by end users. The default is "1" * * This variable can be set to the following values: @@ -312,14 +362,25 @@ extern "C" { #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" + /** - * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac) +* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size +* +* Use this hint in case you need to set SDL's threads stack size to other than the default. +* This is specially useful if you build SDL against a non glibc libc library (such as musl) which +* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). +* Support for this hint is currently available only in the pthread backend. +*/ +#define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" + +/** + * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) */ #define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" /** * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac - * + * * If present, holding ctrl while left clicking will generate a right click * event when on Mac. */ @@ -360,7 +421,7 @@ extern "C" { */ #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" -/* +/** * \brief A URL to a WinRT app's privacy policy * * All network-enabled WinRT apps must make a privacy policy available to its @@ -384,13 +445,13 @@ extern "C" { * will not get used on that platform. Network-enabled phone apps should display * their privacy policy through some other, in-app means. */ -#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_HINT_WINRT_PRIVACY_POLICY_URL" +#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" /** \brief Label text for a WinRT app's privacy policy link * * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, * Microsoft mandates that this policy be available via the Windows Settings charm. - * SDL provides code to add a link there, with it's label text being set via the + * SDL provides code to add a link there, with its label text being set via the * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. * * Please note that a privacy policy's contents are not set via this hint. A separate @@ -405,16 +466,59 @@ extern "C" { * For additional information on linking to a privacy policy, see the documentation for * SDL_HINT_WINRT_PRIVACY_POLICY_URL. */ -#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_HINT_WINRT_PRIVACY_POLICY_LABEL" +#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" -/** \brief If set to 1, back button press events on Windows Phone 8+ will be marked as handled. +/** \brief Allows back-button-press events on Windows Phone to be marked as handled * - * TODO, WinRT: document SDL_HINT_WINRT_HANDLE_BACK_BUTTON need and use - * For now, more details on why this is needed can be found at the - * beginning of the following web page: + * Windows Phone devices typically feature a Back button. When pressed, + * the OS will emit back-button-press events, which apps are expected to + * handle in an appropriate manner. If apps do not explicitly mark these + * events as 'Handled', then the OS will invoke its default behavior for + * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to + * terminate the app (and attempt to switch to the previous app, or to the + * device's home screen). + * + * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL + * to mark back-button-press events as Handled, if and when one is sent to + * the app. + * + * Internally, Windows Phone sends back button events as parameters to + * special back-button-press callback functions. Apps that need to respond + * to back-button-press events are expected to register one or more + * callback functions for such, shortly after being launched (during the + * app's initialization phase). After the back button is pressed, the OS + * will invoke these callbacks. If the app's callback(s) do not explicitly + * mark the event as handled by the time they return, or if the app never + * registers one of these callback, the OS will consider the event + * un-handled, and it will apply its default back button behavior (terminate + * the app). + * + * SDL registers its own back-button-press callback with the Windows Phone + * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN + * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which + * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. + * If the hint's value is set to "1", the back button event's Handled + * property will get set to 'true'. If the hint's value is set to something + * else, or if it is unset, SDL will leave the event's Handled property + * alone. (By default, the OS sets this property to 'false', to note.) + * + * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a + * back button is pressed, or can set it in direct-response to a back button + * being pressed. + * + * In order to get notified when a back button is pressed, SDL apps should + * register a callback function with SDL_AddEventWatch(), and have it listen + * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. + * (Alternatively, SDL_KEYUP events can be listened-for. Listening for + * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON + * set by such a callback, will be applied to the OS' current + * back-button-press event. + * + * More details on back button behavior in Windows Phone apps can be found + * at the following page, on Microsoft's developer site: * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx */ -#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_HINT_WINRT_HANDLE_BACK_BUTTON" +#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" /** * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X. @@ -427,7 +531,7 @@ extern "C" { * button on their titlebars). * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" - * button on their titlebars. + * button on their titlebars). * * The default value is "1". Spaces are disabled regardless of this hint if * the OS isn't at least Mac OS X Lion (10.7). This hint must be set before @@ -435,6 +539,96 @@ extern "C" { */ #define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES" +/** +* \brief When set don't force the SDL app to become a foreground process +* +* This hint only applies to Mac OS X. +* +*/ +#define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" + +/** + * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" + +/** + * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" + +/** + * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. + * + * The variable can be set to the following values: + * "0" - SDL_TEXTEDITING events are sent, and it is the application's + * responsibility to render the text from these events and + * differentiate it somehow from committed text. (default) + * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent, + * and text that is being composed will be rendered in its own UI. + */ +#define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" + + /** + * \brief A variable to control whether mouse and touch events are to be treated together or separately + * + * The variable can be set to the following values: + * "0" - Mouse events will be handled as touch events, and touch will raise fake mouse + * events. This is the behaviour of SDL <= 2.0.3. (default) + * "1" - Mouse events will be handled separately from pure touch events. + * + * The value of this hint is used at runtime, so it can be changed at any time. + */ +#define SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH "SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH" + +/** + * \brief override the binding element for keyboard inputs for Emscripten builds + * + * This hint only applies to the emscripten platform + * + * The variable can be one of + * "#window" - The javascript window object (this is the default) + * "#document" - The javascript document object + * "#screen" - the javascript window.screen object + * "#canvas" - the WebGL canvas element + * any other string without a leading # sign applies to the element on the page with that ID. + */ +#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" + +/** + * \brief Tell SDL not to catch the SIGINT or SIGTERM signals. + * + * This hint only applies to Unix-like platforms. + * + * The variable can be set to the following values: + * "0" - SDL will install a SIGINT and SIGTERM handler, and when it + * catches a signal, convert it into an SDL_QUIT event. + * "1" - SDL will not install a signal handler at all. + */ +#define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS" + +/** + * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows. + * + * The variable can be set to the following values: + * "0" - SDL will generate a window-close event when it sees Alt+F4. + * "1" - SDL will only do normal key handling for Alt+F4. + */ +#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" /** * \brief An enumeration of hint priorities diff --git a/code/SDL2/include/SDL_joystick.h b/code/SDL2/include/SDL_joystick.h index b0b1c667..266f3b38 100644 --- a/code/SDL2/include/SDL_joystick.h +++ b/code/SDL2/include/SDL_joystick.h @@ -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 @@ -71,6 +71,16 @@ typedef struct { typedef Sint32 SDL_JoystickID; +typedef enum +{ + SDL_JOYSTICK_POWER_UNKNOWN = -1, + SDL_JOYSTICK_POWER_EMPTY, + SDL_JOYSTICK_POWER_LOW, + SDL_JOYSTICK_POWER_MEDIUM, + SDL_JOYSTICK_POWER_FULL, + SDL_JOYSTICK_POWER_WIRED, + SDL_JOYSTICK_POWER_MAX +} SDL_JoystickPowerLevel; /* Function prototypes */ /** @@ -87,14 +97,20 @@ extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); /** * Open a joystick for use. - * The index passed as an argument refers tothe N'th joystick on the system. - * This index is the value which will identify this joystick in future joystick - * events. + * The index passed as an argument refers to the N'th joystick on the system. + * This index is not the value which will identify this joystick in future + * joystick events. The joystick's instance id (::SDL_JoystickID) will be used + * there instead. * * \return A joystick identifier, or NULL if an error occurred. */ extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); +/** + * Return the SDL_Joystick associated with an instance id. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID joyid); + /** * Return the name for this currently opened joystick. * If no name can be found, this function returns NULL. @@ -189,7 +205,7 @@ extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick, */ /* @{ */ #define SDL_HAT_CENTERED 0x00 -#define SDL_HAT_UP 0x01 +#define SDL_HAT_UP 0x01 #define SDL_HAT_RIGHT 0x02 #define SDL_HAT_DOWN 0x04 #define SDL_HAT_LEFT 0x08 @@ -241,6 +257,10 @@ extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick * joystick, */ extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick * joystick); +/** + * Return the battery level of this joystick + */ +extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL_Joystick * joystick); /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/code/SDL2/include/SDL_keyboard.h b/code/SDL2/include/SDL_keyboard.h index 586a26cf..bbba0f07 100644 --- a/code/SDL2/include/SDL_keyboard.h +++ b/code/SDL2/include/SDL_keyboard.h @@ -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/code/SDL2/include/SDL_keycode.h b/code/SDL2/include/SDL_keycode.h index d5f5dd0a..7be96357 100644 --- a/code/SDL2/include/SDL_keycode.h +++ b/code/SDL2/include/SDL_keycode.h @@ -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/code/SDL2/include/SDL_loadso.h b/code/SDL2/include/SDL_loadso.h index 0359eae1..3d540bd7 100644 --- a/code/SDL2/include/SDL_loadso.h +++ b/code/SDL2/include/SDL_loadso.h @@ -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/code/SDL2/include/SDL_log.h b/code/SDL2/include/SDL_log.h index 5c2bca59..09be1104 100644 --- a/code/SDL2/include/SDL_log.h +++ b/code/SDL2/include/SDL_log.h @@ -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 @@ -137,44 +137,44 @@ extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); /** * \brief Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO */ -extern DECLSPEC void SDLCALL SDL_Log(const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /** * \brief Log a message with SDL_LOG_PRIORITY_VERBOSE */ -extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_DEBUG */ -extern DECLSPEC void SDLCALL SDL_LogDebug(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_INFO */ -extern DECLSPEC void SDLCALL SDL_LogInfo(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_WARN */ -extern DECLSPEC void SDLCALL SDL_LogWarn(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_ERROR */ -extern DECLSPEC void SDLCALL SDL_LogError(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_CRITICAL */ -extern DECLSPEC void SDLCALL SDL_LogCritical(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with the specified category and priority. */ extern DECLSPEC void SDLCALL SDL_LogMessage(int category, SDL_LogPriority priority, - const char *fmt, ...); + SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3); /** * \brief Log a message with the specified category and priority. diff --git a/code/SDL2/include/SDL_main.h b/code/SDL2/include/SDL_main.h index 2e8fae95..9ce3754e 100644 --- a/code/SDL2/include/SDL_main.h +++ b/code/SDL2/include/SDL_main.h @@ -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 @@ -67,6 +67,15 @@ */ #define SDL_MAIN_NEEDED +#elif defined(__NACL__) +/* On NACL we use ppapi_simple to set up the application helper code, + then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before + starting the user main function. + All user code is run in a separate thread by ppapi_simple, thus + allowing for blocking io to take place via nacl_io +*/ +#define SDL_MAIN_NEEDED + #endif #endif /* SDL_MAIN_HANDLED */ @@ -133,14 +142,11 @@ extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); * \brief Initializes and launches an SDL/WinRT application. * * \param mainFunction The SDL app's C-style main(). - * \param xamlBackgroundPanel An optional, XAML-based, background panel. - * For Non-XAML apps, this value must be set to NULL. For XAML apps, - * pass in a pointer to a SwapChainBackgroundPanel, casted to an - * IInspectable (via reinterpret_cast). - * \ret 0 on success, -1 on failure. On failure, use SDL_GetError to retrieve more + * \param reserved Reserved for future use; should be NULL + * \return 0 on success, -1 on failure. On failure, use SDL_GetError to retrieve more * information on the failure. */ -extern DECLSPEC int SDLCALL SDL_WinRTRunApp(int (*mainFunction)(int, char **), void * xamlBackgroundPanel); +extern DECLSPEC int SDLCALL SDL_WinRTRunApp(int (*mainFunction)(int, char **), void * reserved); #endif /* __WINRT__ */ diff --git a/code/SDL2/include/SDL_messagebox.h b/code/SDL2/include/SDL_messagebox.h index 6004da0f..ec370dbb 100644 --- a/code/SDL2/include/SDL_messagebox.h +++ b/code/SDL2/include/SDL_messagebox.h @@ -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/code/SDL2/include/SDL_mouse.h b/code/SDL2/include/SDL_mouse.h index ebfd18fa..ea9622f0 100644 --- a/code/SDL2/include/SDL_mouse.h +++ b/code/SDL2/include/SDL_mouse.h @@ -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 @@ -60,6 +60,15 @@ typedef enum SDL_NUM_SYSTEM_CURSORS } SDL_SystemCursor; +/** + * \brief Scroll direction types for the Scroll event + */ +typedef enum +{ + SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */ + SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ +} SDL_MouseWheelDirection; + /* Function prototypes */ /** @@ -77,6 +86,31 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); */ extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); +/** + * \brief Get the current state of the mouse, in relation to the desktop + * + * This works just like SDL_GetMouseState(), but the coordinates will be + * reported relative to the top-left of the desktop. This can be useful if + * you need to track the mouse outside of a specific window and + * SDL_CaptureMouse() doesn't fit your needs. For example, it could be + * useful if you need to track the mouse while dragging a window, where + * coordinates relative to a window might not be in sync at all times. + * + * \note SDL_GetMouseState() returns the mouse position as SDL understands + * it from the last pump of the event queue. This function, however, + * queries the OS for the current mouse position, and as such, might + * be a slightly less efficient function. Unless you know what you're + * doing and have a good reason to use this function, you probably want + * SDL_GetMouseState() instead. + * + * \param x Returns the current X coord, relative to the desktop. Can be NULL. + * \param y Returns the current Y coord, relative to the desktop. Can be NULL. + * \return The current button state as a bitmask, which can be tested using the SDL_BUTTON(X) macros. + * + * \sa SDL_GetMouseState + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); + /** * \brief Retrieve the relative state of the mouse. * @@ -98,6 +132,17 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, int x, int y); +/** + * \brief Moves the mouse to the given position in global screen space. + * + * \param x The x coordinate + * \param y The y coordinate + * \return 0 on success, -1 on error (usually: unsupported by a platform). + * + * \note This function generates a mouse motion event + */ +extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y); + /** * \brief Set relative mouse mode. * @@ -116,6 +161,37 @@ extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, */ extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); +/** + * \brief Capture the mouse, to track input outside an SDL window. + * + * \param enabled Whether or not to enable capturing + * + * Capturing enables your app to obtain mouse events globally, instead of + * just within your window. Not all video targets support this function. + * When capturing is enabled, the current window will get all mouse events, + * but unlike relative mode, no change is made to the cursor and it is + * not restrained to your window. + * + * This function may also deny mouse input to other windows--both those in + * your application and others on the system--so you should use this + * function sparingly, and in small bursts. For example, you might want to + * track the mouse while the user is dragging something, until the user + * releases a mouse button. It is not recommended that you capture the mouse + * for long periods of time, such as the entire time your app is running. + * + * While captured, mouse events still report coordinates relative to the + * current (foreground) window, but those coordinates may be outside the + * bounds of the window (including negative values). Capturing is only + * allowed for the foreground window. If the window loses focus while + * capturing, the capture will be disabled automatically. + * + * While capturing is enabled, the current window will have the + * SDL_WINDOW_MOUSE_CAPTURE flag set. + * + * \return 0 on success, or -1 if not supported. + */ +extern DECLSPEC int SDLCALL SDL_CaptureMouse(SDL_bool enabled); + /** * \brief Query whether relative mouse mode is enabled. * diff --git a/code/SDL2/include/SDL_mutex.h b/code/SDL2/include/SDL_mutex.h index 3e8b4dbe..b7e39734 100644 --- a/code/SDL2/include/SDL_mutex.h +++ b/code/SDL2/include/SDL_mutex.h @@ -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/code/SDL2/include/SDL_name.h b/code/SDL2/include/SDL_name.h index 719666ff..06cd4a5e 100644 --- a/code/SDL2/include/SDL_name.h +++ b/code/SDL2/include/SDL_name.h @@ -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/code/SDL2/include/SDL_opengl.h b/code/SDL2/include/SDL_opengl.h index b48ea7ab..780919bc 100644 --- a/code/SDL2/include/SDL_opengl.h +++ b/code/SDL2/include/SDL_opengl.h @@ -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 @@ -25,48 +25,6 @@ * This is a simple file to encapsulate the OpenGL API headers. */ -#ifndef _SDL_opengl_h -#define _SDL_opengl_h - -#include "SDL_config.h" - -#ifndef __IPHONEOS__ - -#ifdef __WIN32__ -#define WIN32_LEAN_AND_MEAN -#ifndef NOMINMAX -#define NOMINMAX /* Don't defined min() and max() */ -#endif -#include -#endif - -#ifdef __glext_h_ -/* Someone has already included glext.h */ -#define NO_SDL_GLEXT -#endif -#ifndef NO_SDL_GLEXT -#define __glext_h_ /* Don't let gl.h include glext.h */ -#endif -#if defined(__MACOSX__) -#include /* Header File For The OpenGL Library */ -#define __X_GL_H -#else -#include /* Header File For The OpenGL Library */ -#endif -#ifndef NO_SDL_GLEXT -#undef __glext_h_ -#endif - -/** - * \file SDL_opengl.h - * - * This file is included because glext.h is not available on some systems. - * If you don't want this version included, simply define ::NO_SDL_GLEXT. - * - * The latest version is available from: - * http://www.opengl.org/registry/ - */ - /** * \def NO_SDL_GLEXT * @@ -74,5246 +32,1936 @@ * version included in SDL_opengl.h. */ -#if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) -#ifndef __glext_h_ -#define __glext_h_ +#ifndef _SDL_opengl_h +#define _SDL_opengl_h + +#include "SDL_config.h" + +#ifndef __IPHONEOS__ /* No OpenGL on iOS. */ + +/* + * Mesa 3-D graphics library + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef __gl_h_ +#define __gl_h_ + +#if defined(USE_MGL_NAMESPACE) +#include "gl_mangle.h" +#endif + + +/********************************************************************** + * Begin system-specific stuff. + */ + +#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) +#define __WIN32__ +#endif + +#if defined(__WIN32__) && !defined(__CYGWIN__) +# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ +# define GLAPI __declspec(dllexport) +# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ +# define GLAPI __declspec(dllimport) +# else /* for use with static link lib build of Win32 edition only */ +# define GLAPI extern +# endif /* _STATIC_MESA support */ +# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ +# define GLAPIENTRY +# else +# define GLAPIENTRY __stdcall +# endif +#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ +# define GLAPI extern +# define GLAPIENTRY __stdcall +#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) +# define GLAPI __attribute__((visibility("default"))) +# define GLAPIENTRY +#endif /* WIN32 && !CYGWIN */ + +/* + * WINDOWS: Include windows.h here to define APIENTRY. + * It is also useful when applications include this file by + * including only glut.h, since glut.h depends on windows.h. + * Applications needing to include windows.h with parms other + * than "WIN32_LEAN_AND_MEAN" may include windows.h before + * glut.h or gl.h. + */ +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#ifndef GLAPI +#define GLAPI extern +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY +#endif + +#ifndef APIENTRY +#define APIENTRY GLAPIENTRY +#endif + +/* "P" suffix to be used for a pointer to a function */ +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifndef GLAPIENTRYP +#define GLAPIENTRYP GLAPIENTRY * +#endif + +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export on +#endif + +/* + * End system-specific stuff. + **********************************************************************/ + + #ifdef __cplusplus extern "C" { #endif + + +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_ARB_imaging 1 + + /* -** Copyright (c) 2007-2010 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. -*/ - -/* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated $Date: 2010-08-03 01:30:25 -0700 (Tue, 03 Aug 2010) $ */ -/* Current version at http://www.opengl.org/registry/ */ -#define GL_GLEXT_VERSION 64 -/* Function declaration macros - to move into glplatform.h */ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define WIN32_LEAN_AND_MEAN 1 -#include -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif -#ifndef GLAPI -#define GLAPI extern -#endif - -/*************************************************************/ - -#ifndef GL_VERSION_1_2 -#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_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_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_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#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_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_ALIASED_LINE_WIDTH_RANGE 0x846E -#endif - -#ifndef GL_VERSION_1_2_DEPRECATED -#define GL_RESCALE_NORMAL 0x803A -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#endif - -#ifndef GL_ARB_imaging -#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 -#endif - -#ifndef GL_ARB_imaging_DEPRECATED -#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_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#endif - -#ifndef GL_VERSION_1_3 -#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_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_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_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#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_CLAMP_TO_BORDER 0x812D -#endif - -#ifndef GL_VERSION_1_3_DEPRECATED -#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_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#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_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#endif - -#ifndef GL_VERSION_1_4 -#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_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#endif - -#ifndef GL_VERSION_1_4_DEPRECATED -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#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_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#endif - -#ifndef GL_VERSION_1_5 -#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_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 -#endif - -#ifndef GL_VERSION_1_5_DEPRECATED -#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_FOG_COORD_SRC 0x8450 -#define GL_FOG_COORD 0x8451 -#define GL_CURRENT_FOG_COORD 0x8453 -#define GL_FOG_COORD_ARRAY_TYPE 0x8454 -#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORD_ARRAY_POINTER 0x8456 -#define GL_FOG_COORD_ARRAY 0x8457 -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D -#define GL_SRC0_RGB 0x8580 -#define GL_SRC1_RGB 0x8581 -#define GL_SRC2_RGB 0x8582 -#define GL_SRC0_ALPHA 0x8588 -#define GL_SRC1_ALPHA 0x8589 -#define GL_SRC2_ALPHA 0x858A -#endif - -#ifndef GL_VERSION_2_0 -#define GL_BLEND_EQUATION_RGB 0x8009 -#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_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_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#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 -#endif - -#ifndef GL_VERSION_2_0_DEPRECATED -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_TEXTURE_COORDS 0x8871 -#endif - -#ifndef GL_VERSION_2_1 -#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_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#endif - -#ifndef GL_VERSION_2_1_DEPRECATED -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -#endif - -#ifndef GL_VERSION_3_0 -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#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_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 -#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_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#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_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 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -/* Reuse tokens from ARB_depth_buffer_float */ -/* reuse GL_DEPTH_COMPONENT32F */ -/* reuse GL_DEPTH32F_STENCIL8 */ -/* reuse GL_FLOAT_32_UNSIGNED_INT_24_8_REV */ -/* Reuse tokens from ARB_framebuffer_object */ -/* reuse GL_INVALID_FRAMEBUFFER_OPERATION */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ -/* reuse GL_FRAMEBUFFER_DEFAULT */ -/* reuse GL_FRAMEBUFFER_UNDEFINED */ -/* reuse GL_DEPTH_STENCIL_ATTACHMENT */ -/* reuse GL_INDEX */ -/* reuse GL_MAX_RENDERBUFFER_SIZE */ -/* reuse GL_DEPTH_STENCIL */ -/* reuse GL_UNSIGNED_INT_24_8 */ -/* reuse GL_DEPTH24_STENCIL8 */ -/* reuse GL_TEXTURE_STENCIL_SIZE */ -/* reuse GL_TEXTURE_RED_TYPE */ -/* reuse GL_TEXTURE_GREEN_TYPE */ -/* reuse GL_TEXTURE_BLUE_TYPE */ -/* reuse GL_TEXTURE_ALPHA_TYPE */ -/* reuse GL_TEXTURE_DEPTH_TYPE */ -/* reuse GL_UNSIGNED_NORMALIZED */ -/* reuse GL_FRAMEBUFFER_BINDING */ -/* reuse GL_DRAW_FRAMEBUFFER_BINDING */ -/* reuse GL_RENDERBUFFER_BINDING */ -/* reuse GL_READ_FRAMEBUFFER */ -/* reuse GL_DRAW_FRAMEBUFFER */ -/* reuse GL_READ_FRAMEBUFFER_BINDING */ -/* reuse GL_RENDERBUFFER_SAMPLES */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -/* reuse GL_FRAMEBUFFER_COMPLETE */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */ -/* reuse GL_FRAMEBUFFER_UNSUPPORTED */ -/* reuse GL_MAX_COLOR_ATTACHMENTS */ -/* reuse GL_COLOR_ATTACHMENT0 */ -/* reuse GL_COLOR_ATTACHMENT1 */ -/* reuse GL_COLOR_ATTACHMENT2 */ -/* reuse GL_COLOR_ATTACHMENT3 */ -/* reuse GL_COLOR_ATTACHMENT4 */ -/* reuse GL_COLOR_ATTACHMENT5 */ -/* reuse GL_COLOR_ATTACHMENT6 */ -/* reuse GL_COLOR_ATTACHMENT7 */ -/* reuse GL_COLOR_ATTACHMENT8 */ -/* reuse GL_COLOR_ATTACHMENT9 */ -/* reuse GL_COLOR_ATTACHMENT10 */ -/* reuse GL_COLOR_ATTACHMENT11 */ -/* reuse GL_COLOR_ATTACHMENT12 */ -/* reuse GL_COLOR_ATTACHMENT13 */ -/* reuse GL_COLOR_ATTACHMENT14 */ -/* reuse GL_COLOR_ATTACHMENT15 */ -/* reuse GL_DEPTH_ATTACHMENT */ -/* reuse GL_STENCIL_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER */ -/* reuse GL_RENDERBUFFER */ -/* reuse GL_RENDERBUFFER_WIDTH */ -/* reuse GL_RENDERBUFFER_HEIGHT */ -/* reuse GL_RENDERBUFFER_INTERNAL_FORMAT */ -/* reuse GL_STENCIL_INDEX1 */ -/* reuse GL_STENCIL_INDEX4 */ -/* reuse GL_STENCIL_INDEX8 */ -/* reuse GL_STENCIL_INDEX16 */ -/* reuse GL_RENDERBUFFER_RED_SIZE */ -/* reuse GL_RENDERBUFFER_GREEN_SIZE */ -/* reuse GL_RENDERBUFFER_BLUE_SIZE */ -/* reuse GL_RENDERBUFFER_ALPHA_SIZE */ -/* reuse GL_RENDERBUFFER_DEPTH_SIZE */ -/* reuse GL_RENDERBUFFER_STENCIL_SIZE */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ -/* reuse GL_MAX_SAMPLES */ -/* Reuse tokens from ARB_framebuffer_sRGB */ -/* reuse GL_FRAMEBUFFER_SRGB */ -/* Reuse tokens from ARB_half_float_vertex */ -/* reuse GL_HALF_FLOAT */ -/* Reuse tokens from ARB_map_buffer_range */ -/* reuse GL_MAP_READ_BIT */ -/* reuse GL_MAP_WRITE_BIT */ -/* reuse GL_MAP_INVALIDATE_RANGE_BIT */ -/* reuse GL_MAP_INVALIDATE_BUFFER_BIT */ -/* reuse GL_MAP_FLUSH_EXPLICIT_BIT */ -/* reuse GL_MAP_UNSYNCHRONIZED_BIT */ -/* Reuse tokens from ARB_texture_compression_rgtc */ -/* reuse GL_COMPRESSED_RED_RGTC1 */ -/* reuse GL_COMPRESSED_SIGNED_RED_RGTC1 */ -/* reuse GL_COMPRESSED_RG_RGTC2 */ -/* reuse GL_COMPRESSED_SIGNED_RG_RGTC2 */ -/* Reuse tokens from ARB_texture_rg */ -/* reuse GL_RG */ -/* reuse GL_RG_INTEGER */ -/* reuse GL_R8 */ -/* reuse GL_R16 */ -/* reuse GL_RG8 */ -/* reuse GL_RG16 */ -/* reuse GL_R16F */ -/* reuse GL_R32F */ -/* reuse GL_RG16F */ -/* reuse GL_RG32F */ -/* reuse GL_R8I */ -/* reuse GL_R8UI */ -/* reuse GL_R16I */ -/* reuse GL_R16UI */ -/* reuse GL_R32I */ -/* reuse GL_R32UI */ -/* reuse GL_RG8I */ -/* reuse GL_RG8UI */ -/* reuse GL_RG16I */ -/* reuse GL_RG16UI */ -/* reuse GL_RG32I */ -/* reuse GL_RG32UI */ -/* Reuse tokens from ARB_vertex_array_object */ -/* reuse GL_VERTEX_ARRAY_BINDING */ -#endif - -#ifndef GL_VERSION_3_0_DEPRECATED -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B -#define GL_ALPHA_INTEGER 0x8D97 -/* Reuse tokens from ARB_framebuffer_object */ -/* reuse GL_TEXTURE_LUMINANCE_TYPE */ -/* reuse GL_TEXTURE_INTENSITY_TYPE */ -#endif - -#ifndef GL_VERSION_3_1 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#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_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_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#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 -/* Reuse tokens from ARB_copy_buffer */ -/* reuse GL_COPY_READ_BUFFER */ -/* reuse GL_COPY_WRITE_BUFFER */ -/* Reuse tokens from ARB_draw_instanced (none) */ -/* Reuse tokens from ARB_uniform_buffer_object */ -/* reuse GL_UNIFORM_BUFFER */ -/* reuse GL_UNIFORM_BUFFER_BINDING */ -/* reuse GL_UNIFORM_BUFFER_START */ -/* reuse GL_UNIFORM_BUFFER_SIZE */ -/* reuse GL_MAX_VERTEX_UNIFORM_BLOCKS */ -/* reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS */ -/* reuse GL_MAX_COMBINED_UNIFORM_BLOCKS */ -/* reuse GL_MAX_UNIFORM_BUFFER_BINDINGS */ -/* reuse GL_MAX_UNIFORM_BLOCK_SIZE */ -/* reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */ -/* reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */ -/* reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */ -/* reuse GL_ACTIVE_UNIFORM_BLOCKS */ -/* reuse GL_UNIFORM_TYPE */ -/* reuse GL_UNIFORM_SIZE */ -/* reuse GL_UNIFORM_NAME_LENGTH */ -/* reuse GL_UNIFORM_BLOCK_INDEX */ -/* reuse GL_UNIFORM_OFFSET */ -/* reuse GL_UNIFORM_ARRAY_STRIDE */ -/* reuse GL_UNIFORM_MATRIX_STRIDE */ -/* reuse GL_UNIFORM_IS_ROW_MAJOR */ -/* reuse GL_UNIFORM_BLOCK_BINDING */ -/* reuse GL_UNIFORM_BLOCK_DATA_SIZE */ -/* reuse GL_UNIFORM_BLOCK_NAME_LENGTH */ -/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */ -/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */ -/* reuse GL_INVALID_INDEX */ -#endif - -#ifndef GL_VERSION_3_2 -#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_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_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#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 -/* reuse GL_MAX_VARYING_COMPONENTS */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -/* Reuse tokens from ARB_depth_clamp */ -/* reuse GL_DEPTH_CLAMP */ -/* Reuse tokens from ARB_draw_elements_base_vertex (none) */ -/* Reuse tokens from ARB_fragment_coord_conventions (none) */ -/* Reuse tokens from ARB_provoking_vertex */ -/* reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ -/* reuse GL_FIRST_VERTEX_CONVENTION */ -/* reuse GL_LAST_VERTEX_CONVENTION */ -/* reuse GL_PROVOKING_VERTEX */ -/* Reuse tokens from ARB_seamless_cube_map */ -/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */ -/* Reuse tokens from ARB_sync */ -/* reuse GL_MAX_SERVER_WAIT_TIMEOUT */ -/* reuse GL_OBJECT_TYPE */ -/* reuse GL_SYNC_CONDITION */ -/* reuse GL_SYNC_STATUS */ -/* reuse GL_SYNC_FLAGS */ -/* reuse GL_SYNC_FENCE */ -/* reuse GL_SYNC_GPU_COMMANDS_COMPLETE */ -/* reuse GL_UNSIGNALED */ -/* reuse GL_SIGNALED */ -/* reuse GL_ALREADY_SIGNALED */ -/* reuse GL_TIMEOUT_EXPIRED */ -/* reuse GL_CONDITION_SATISFIED */ -/* reuse GL_WAIT_FAILED */ -/* reuse GL_TIMEOUT_IGNORED */ -/* reuse GL_SYNC_FLUSH_COMMANDS_BIT */ -/* reuse GL_TIMEOUT_IGNORED */ -/* Reuse tokens from ARB_texture_multisample */ -/* reuse GL_SAMPLE_POSITION */ -/* reuse GL_SAMPLE_MASK */ -/* reuse GL_SAMPLE_MASK_VALUE */ -/* reuse GL_MAX_SAMPLE_MASK_WORDS */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE */ -/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE */ -/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_TEXTURE_SAMPLES */ -/* reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */ -/* reuse GL_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_MAX_COLOR_TEXTURE_SAMPLES */ -/* reuse GL_MAX_DEPTH_TEXTURE_SAMPLES */ -/* reuse GL_MAX_INTEGER_SAMPLES */ -/* Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core */ -#endif - -#ifndef GL_VERSION_3_3 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -/* Reuse tokens from ARB_blend_func_extended */ -/* reuse GL_SRC1_COLOR */ -/* reuse GL_ONE_MINUS_SRC1_COLOR */ -/* reuse GL_ONE_MINUS_SRC1_ALPHA */ -/* reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */ -/* Reuse tokens from ARB_explicit_attrib_location (none) */ -/* Reuse tokens from ARB_occlusion_query2 */ -/* reuse GL_ANY_SAMPLES_PASSED */ -/* Reuse tokens from ARB_sampler_objects */ -/* reuse GL_SAMPLER_BINDING */ -/* Reuse tokens from ARB_shader_bit_encoding (none) */ -/* Reuse tokens from ARB_texture_rgb10_a2ui */ -/* reuse GL_RGB10_A2UI */ -/* Reuse tokens from ARB_texture_swizzle */ -/* reuse GL_TEXTURE_SWIZZLE_R */ -/* reuse GL_TEXTURE_SWIZZLE_G */ -/* reuse GL_TEXTURE_SWIZZLE_B */ -/* reuse GL_TEXTURE_SWIZZLE_A */ -/* reuse GL_TEXTURE_SWIZZLE_RGBA */ -/* Reuse tokens from ARB_timer_query */ -/* reuse GL_TIME_ELAPSED */ -/* reuse GL_TIMESTAMP */ -/* Reuse tokens from ARB_vertex_type_2_10_10_10_rev */ -/* reuse GL_INT_2_10_10_10_REV */ -#endif - -#ifndef GL_VERSION_4_0 -#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_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 -/* Reuse tokens from ARB_texture_query_lod (none) */ -/* Reuse tokens from ARB_draw_buffers_blend (none) */ -/* Reuse tokens from ARB_draw_indirect */ -/* reuse GL_DRAW_INDIRECT_BUFFER */ -/* reuse GL_DRAW_INDIRECT_BUFFER_BINDING */ -/* Reuse tokens from ARB_gpu_shader5 */ -/* reuse GL_GEOMETRY_SHADER_INVOCATIONS */ -/* reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS */ -/* reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */ -/* reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */ -/* reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */ -/* reuse GL_MAX_VERTEX_STREAMS */ -/* Reuse tokens from ARB_gpu_shader_fp64 */ -/* reuse GL_DOUBLE_VEC2 */ -/* reuse GL_DOUBLE_VEC3 */ -/* reuse GL_DOUBLE_VEC4 */ -/* reuse GL_DOUBLE_MAT2 */ -/* reuse GL_DOUBLE_MAT3 */ -/* reuse GL_DOUBLE_MAT4 */ -/* reuse GL_DOUBLE_MAT2x3 */ -/* reuse GL_DOUBLE_MAT2x4 */ -/* reuse GL_DOUBLE_MAT3x2 */ -/* reuse GL_DOUBLE_MAT3x4 */ -/* reuse GL_DOUBLE_MAT4x2 */ -/* reuse GL_DOUBLE_MAT4x3 */ -/* Reuse tokens from ARB_shader_subroutine */ -/* reuse GL_ACTIVE_SUBROUTINES */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORMS */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */ -/* reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */ -/* reuse GL_MAX_SUBROUTINES */ -/* reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */ -/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */ -/* reuse GL_COMPATIBLE_SUBROUTINES */ -/* Reuse tokens from ARB_tessellation_shader */ -/* reuse GL_PATCHES */ -/* reuse GL_PATCH_VERTICES */ -/* reuse GL_PATCH_DEFAULT_INNER_LEVEL */ -/* reuse GL_PATCH_DEFAULT_OUTER_LEVEL */ -/* reuse GL_TESS_CONTROL_OUTPUT_VERTICES */ -/* reuse GL_TESS_GEN_MODE */ -/* reuse GL_TESS_GEN_SPACING */ -/* reuse GL_TESS_GEN_VERTEX_ORDER */ -/* reuse GL_TESS_GEN_POINT_MODE */ -/* reuse GL_ISOLINES */ -/* reuse GL_FRACTIONAL_ODD */ -/* reuse GL_FRACTIONAL_EVEN */ -/* reuse GL_MAX_PATCH_VERTICES */ -/* reuse GL_MAX_TESS_GEN_LEVEL */ -/* reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */ -/* reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */ -/* reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_PATCH_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */ -/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */ -/* reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */ -/* reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */ -/* reuse GL_TESS_EVALUATION_SHADER */ -/* reuse GL_TESS_CONTROL_SHADER */ -/* Reuse tokens from ARB_texture_buffer_object_rgb32 (none) */ -/* Reuse tokens from ARB_transform_feedback2 */ -/* reuse GL_TRANSFORM_FEEDBACK */ -/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ -/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ -/* reuse GL_TRANSFORM_FEEDBACK_BINDING */ -/* Reuse tokens from ARB_transform_feedback3 */ -/* reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */ -/* reuse GL_MAX_VERTEX_STREAMS */ -#endif - -#ifndef GL_VERSION_4_1 -/* Reuse tokens from ARB_ES2_compatibility */ -/* reuse GL_FIXED */ -/* reuse GL_IMPLEMENTATION_COLOR_READ_TYPE */ -/* reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT */ -/* reuse GL_LOW_FLOAT */ -/* reuse GL_MEDIUM_FLOAT */ -/* reuse GL_HIGH_FLOAT */ -/* reuse GL_LOW_INT */ -/* reuse GL_MEDIUM_INT */ -/* reuse GL_HIGH_INT */ -/* reuse GL_SHADER_COMPILER */ -/* reuse GL_NUM_SHADER_BINARY_FORMATS */ -/* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */ -/* reuse GL_MAX_VARYING_VECTORS */ -/* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */ -/* Reuse tokens from ARB_get_program_binary */ -/* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */ -/* reuse GL_PROGRAM_BINARY_LENGTH */ -/* reuse GL_NUM_PROGRAM_BINARY_FORMATS */ -/* reuse GL_PROGRAM_BINARY_FORMATS */ -/* Reuse tokens from ARB_separate_shader_objects */ -/* reuse GL_VERTEX_SHADER_BIT */ -/* reuse GL_FRAGMENT_SHADER_BIT */ -/* reuse GL_GEOMETRY_SHADER_BIT */ -/* reuse GL_TESS_CONTROL_SHADER_BIT */ -/* reuse GL_TESS_EVALUATION_SHADER_BIT */ -/* reuse GL_ALL_SHADER_BITS */ -/* reuse GL_PROGRAM_SEPARABLE */ -/* reuse GL_ACTIVE_PROGRAM */ -/* reuse GL_PROGRAM_PIPELINE_BINDING */ -/* Reuse tokens from ARB_shader_precision (none) */ -/* Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already */ -/* Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already */ -/* reuse GL_MAX_VIEWPORTS */ -/* reuse GL_VIEWPORT_SUBPIXEL_BITS */ -/* reuse GL_VIEWPORT_BOUNDS_RANGE */ -/* reuse GL_LAYER_PROVOKING_VERTEX */ -/* reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX */ -/* reuse GL_UNDEFINED_VERTEX */ -#endif - -#ifndef GL_ARB_multitexture -#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 -#endif - -#ifndef GL_ARB_transpose_matrix -#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 -#endif - -#ifndef GL_ARB_multisample -#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 -#endif - -#ifndef GL_ARB_texture_env_add -#endif - -#ifndef GL_ARB_texture_cube_map -#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 -#endif - -#ifndef GL_ARB_texture_compression -#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 -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif - -#ifndef GL_ARB_point_parameters -#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 -#endif - -#ifndef GL_ARB_vertex_blend -#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_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#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 -#endif - -#ifndef GL_ARB_matrix_palette -#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 -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#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 GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif - -#ifndef GL_ARB_depth_texture -#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 -#endif - -#ifndef GL_ARB_shadow -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif - -#ifndef GL_ARB_window_pos -#endif - -#ifndef GL_ARB_vertex_program -#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 -#endif - -#ifndef GL_ARB_fragment_program -#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 -#endif - -#ifndef GL_ARB_vertex_buffer_object -#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 -#endif - -#ifndef GL_ARB_occlusion_query -#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 -#endif - -#ifndef GL_ARB_shader_objects -#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 -#endif - -#ifndef GL_ARB_vertex_shader -#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 -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#endif - -#ifndef GL_ARB_point_sprite -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#endif - -#ifndef GL_ARB_draw_buffers -#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 -#endif - -#ifndef GL_ARB_texture_rectangle -#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 -#endif - -#ifndef GL_ARB_color_buffer_float -#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 -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_HALF_FLOAT_ARB 0x140B -#endif - -#ifndef GL_ARB_texture_float -#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 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 -#endif - -#ifndef GL_ARB_pixel_buffer_object -#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 -#endif - -#ifndef GL_ARB_depth_buffer_float -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#endif - -#ifndef GL_ARB_draw_instanced -#endif - -#ifndef GL_ARB_framebuffer_object -#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_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_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_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING -#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 -#endif - -#ifndef GL_ARB_framebuffer_object_DEPRECATED -#define GL_INDEX 0x8222 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#endif - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#endif - -#ifndef GL_ARB_geometry_shader4 -#define GL_LINES_ADJACENCY_ARB 0x000A -#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B -#define GL_TRIANGLES_ADJACENCY_ARB 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 -#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 -/* reuse GL_MAX_VARYING_COMPONENTS */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -#endif - -#ifndef GL_ARB_half_float_vertex -#define GL_HALF_FLOAT 0x140B -#endif - -#ifndef GL_ARB_instanced_arrays -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE -#endif - -#ifndef GL_ARB_map_buffer_range -#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 -#endif - -#ifndef GL_ARB_texture_buffer_object -#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 -#endif - -#ifndef GL_ARB_texture_compression_rgtc -#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 -#endif - -#ifndef GL_ARB_texture_rg -#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 -#endif - -#ifndef GL_ARB_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#endif - -#ifndef GL_ARB_uniform_buffer_object -#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 0xFFFFFFFFu -#endif - -#ifndef GL_ARB_compatibility -/* ARB_compatibility just defines tokens from core 3.0 */ -#endif - -#ifndef GL_ARB_copy_buffer -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#endif - -#ifndef GL_ARB_shader_texture_lod -#endif - -#ifndef GL_ARB_depth_clamp -#define GL_DEPTH_CLAMP 0x864F -#endif - -#ifndef GL_ARB_draw_elements_base_vertex -#endif - -#ifndef GL_ARB_fragment_coord_conventions -#endif - -#ifndef GL_ARB_provoking_vertex -#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 -#endif - -#ifndef GL_ARB_seamless_cube_map -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#endif - -#ifndef GL_ARB_sync -#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_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull -#endif - -#ifndef GL_ARB_texture_multisample -#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 -#endif - -#ifndef GL_ARB_vertex_array_bgra -/* reuse GL_BGRA */ -#endif - -#ifndef GL_ARB_draw_buffers_blend -#endif - -#ifndef GL_ARB_sample_shading -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 -#endif - -#ifndef GL_ARB_texture_cube_map_array -#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 -#endif - -#ifndef GL_ARB_texture_gather -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#endif - -#ifndef GL_ARB_texture_query_lod -#endif - -#ifndef GL_ARB_shading_language_include -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA -#endif - -#ifndef GL_ARB_texture_compression_bptc -#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 -#endif - -#ifndef GL_ARB_blend_func_extended -#define GL_SRC1_COLOR 0x88F9 -/* reuse GL_SRC1_ALPHA */ -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#endif - -#ifndef GL_ARB_explicit_attrib_location -#endif - -#ifndef GL_ARB_occlusion_query2 -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#endif - -#ifndef GL_ARB_sampler_objects -#define GL_SAMPLER_BINDING 0x8919 -#endif - -#ifndef GL_ARB_shader_bit_encoding -#endif - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_RGB10_A2UI 0x906F -#endif - -#ifndef GL_ARB_texture_swizzle -#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 -#endif - -#ifndef GL_ARB_timer_query -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#endif - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -/* reuse GL_UNSIGNED_INT_2_10_10_10_REV */ -#define GL_INT_2_10_10_10_REV 0x8D9F -#endif - -#ifndef GL_ARB_draw_indirect -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 -#endif - -#ifndef GL_ARB_gpu_shader5 -#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 -/* reuse GL_MAX_VERTEX_STREAMS */ -#endif - -#ifndef GL_ARB_gpu_shader_fp64 -/* reuse GL_DOUBLE */ -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE -#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 -#endif - -#ifndef GL_ARB_shader_subroutine -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B -/* reuse GL_UNIFORM_SIZE */ -/* reuse GL_UNIFORM_NAME_LENGTH */ -#endif - -#ifndef GL_ARB_tessellation_shader -#define GL_PATCHES 0x000E -#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 -/* reuse GL_TRIANGLES */ -/* reuse GL_QUADS */ -#define GL_ISOLINES 0x8E7A -/* reuse GL_EQUAL */ -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -/* reuse GL_CCW */ -/* reuse GL_CW */ -#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_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A -#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_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#endif - -#ifndef GL_ARB_texture_buffer_object_rgb32 -/* reuse GL_RGB32F */ -/* reuse GL_RGB32UI */ -/* reuse GL_RGB32I */ -#endif - -#ifndef GL_ARB_transform_feedback2 -#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 -#endif - -#ifndef GL_ARB_transform_feedback3 -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -#define GL_MAX_VERTEX_STREAMS 0x8E71 -#endif - -#ifndef GL_ARB_ES2_compatibility -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#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_COMPILER 0x8DFA -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#endif - -#ifndef GL_ARB_get_program_binary -#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 -#endif - -#ifndef GL_ARB_separate_shader_objects -#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_ALL_SHADER_BITS 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#endif - -#ifndef GL_ARB_shader_precision -#endif - -#ifndef GL_ARB_vertex_attrib_64bit -/* reuse GL_RGB32I */ -/* reuse GL_DOUBLE_VEC2 */ -/* reuse GL_DOUBLE_VEC3 */ -/* reuse GL_DOUBLE_VEC4 */ -/* reuse GL_DOUBLE_MAT2 */ -/* reuse GL_DOUBLE_MAT3 */ -/* reuse GL_DOUBLE_MAT4 */ -/* reuse GL_DOUBLE_MAT2x3 */ -/* reuse GL_DOUBLE_MAT2x4 */ -/* reuse GL_DOUBLE_MAT3x2 */ -/* reuse GL_DOUBLE_MAT3x4 */ -/* reuse GL_DOUBLE_MAT4x2 */ -/* reuse GL_DOUBLE_MAT4x3 */ -#endif - -#ifndef GL_ARB_viewport_array -/* reuse GL_SCISSOR_BOX */ -/* reuse GL_VIEWPORT */ -/* reuse GL_DEPTH_RANGE */ -/* reuse GL_SCISSOR_TEST */ -#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 -/* reuse GL_FIRST_VERTEX_CONVENTION */ -/* reuse GL_LAST_VERTEX_CONVENTION */ -/* reuse GL_PROVOKING_VERTEX */ -#endif - -#ifndef GL_ARB_cl_event -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 -#endif - -#ifndef GL_ARB_debug_output -#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 -#endif - -#ifndef GL_ARB_robustness -/* reuse GL_NO_ERROR */ -#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 -#endif - -#ifndef GL_ARB_shader_stencil_export -#endif - -#ifndef GL_EXT_abgr -#define GL_ABGR_EXT 0x8000 -#endif - -#ifndef GL_EXT_blend_color -#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 -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#endif - -#ifndef GL_EXT_texture -#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 GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif - -#ifndef GL_EXT_texture3D -#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 -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#endif - -#ifndef GL_EXT_subtexture -#endif - -#ifndef GL_EXT_copy_texture -#endif - -#ifndef GL_EXT_histogram -#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 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#endif - -#ifndef GL_EXT_convolution -#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 -#endif - -#ifndef GL_SGI_color_matrix -#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 -#endif - -#ifndef GL_SGI_color_table -#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 -#endif - -#ifndef GL_SGIS_pixel_texture -#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 -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#endif - -#ifndef GL_SGIS_texture4D -#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_TEXTURE_4D_BINDING_SGIS 0x814F -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif - -#ifndef GL_EXT_cmyka -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif - -#ifndef GL_EXT_texture_object -#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 -#endif - -#ifndef GL_SGIS_detail_texture -#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 -#endif - -#ifndef GL_SGIS_sharpen_texture -#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 -#endif - -#ifndef GL_EXT_packed_pixels -#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 -#endif - -#ifndef GL_SGIS_texture_lod -#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 -#endif - -#ifndef GL_SGIS_multisample -#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 -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif - -#ifndef GL_EXT_vertex_array -#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 -#endif - -#ifndef GL_EXT_misc_attribute -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif - -#ifndef GL_SGIX_clipmap -#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_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif - -#ifndef GL_SGIX_shadow -#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 -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif - -#ifndef GL_EXT_blend_logic_op -#endif - -#ifndef GL_SGIX_interlace -#define GL_INTERLACE_SGIX 0x8094 -#endif - -#ifndef GL_SGIX_pixel_tiles -#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 -#endif - -#ifndef GL_SGIS_texture_select -#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 -#endif - -#ifndef GL_SGIX_sprite -#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 -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif - -#ifndef GL_EXT_point_parameters -#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 -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -#endif - -#ifndef GL_SGIX_instruments -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#endif - -#ifndef GL_SGIX_texture_scale_bias -#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 -#endif - -#ifndef GL_SGIX_framezoom -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#endif - -#ifndef GL_FfdMaskSGIX -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#endif - -#ifndef GL_SGIX_polynomial_ffd -#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 -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#endif - -#ifndef GL_SGIX_flush_raster -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif - -#ifndef GL_HP_image_transform -#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 -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif - -#ifndef GL_INGR_palette_buffer -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif - -#ifndef GL_EXT_color_subtable -#endif - -#ifndef GL_PGI_vertex_hints -#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_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_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 GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif - -#ifndef GL_PGI_misc_hints -#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 -#endif - -#ifndef GL_EXT_paletted_texture -#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 -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_LIST_PRIORITY_SGIX 0x8182 -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif - -#ifndef GL_EXT_index_texture -#endif - -#ifndef GL_EXT_index_material -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -#endif - -#ifndef GL_EXT_index_func -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -#endif - -#ifndef GL_EXT_index_array_formats -#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 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif - -#ifndef GL_SGIX_fragment_lighting -#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 -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -#endif - -#ifndef GL_WIN_phong_shading -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif - -#ifndef GL_WIN_specular_fog -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif - -#ifndef GL_EXT_light_texture -#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 -/* reuse GL_FRAGMENT_DEPTH_EXT */ -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif - -#ifndef GL_SGIX_impact_pixel_texture -#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 -#endif - -#ifndef GL_EXT_bgra -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#endif - -#ifndef GL_SGIX_async -#define GL_ASYNC_MARKER_SGIX 0x8329 -#endif - -#ifndef GL_SGIX_async_pixel -#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 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif - -#ifndef GL_INTEL_texture_scissor -#endif - -#ifndef GL_INTEL_parallel_arrays -#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 -#endif - -#ifndef GL_HP_occlusion_test -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif - -#ifndef GL_EXT_pixel_transform -#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 -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif - -#ifndef GL_EXT_secondary_color -#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 -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -#endif - -#ifndef GL_EXT_multi_draw_arrays -#endif - -#ifndef GL_EXT_fog_coord -#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 -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif - -#ifndef GL_EXT_coordinate_frame -#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 -#endif - -#ifndef GL_EXT_texture_env_combine -#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 -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_FOG_SCALE_SGIX 0x81FC -#define GL_FOG_SCALE_VALUE_SGIX 0x81FD -#endif - -#ifndef GL_SUNX_constant_data -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -#endif - -#ifndef GL_SUN_global_alpha -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -#endif - -#ifndef GL_SUN_triangle_list -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#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 -#endif - -#ifndef GL_SUN_vertex -#endif - -#ifndef GL_EXT_blend_func_separate -#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 -#endif - -#ifndef GL_INGR_color_clamp -#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 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INTERLACE_READ_INGR 0x8568 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif - -#ifndef GL_EXT_texture_cube_map -#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 -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif - -#ifndef GL_EXT_texture_env_add -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT GL_MODELVIEW -#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 -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif - -#ifndef GL_NV_vertex_array_range -#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 -#endif - -#ifndef GL_NV_register_combiners -#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 -/* reuse GL_TEXTURE0_ARB */ -/* reuse GL_TEXTURE1_ARB */ -/* reuse GL_ZERO */ -/* reuse GL_NONE */ -/* reuse GL_FOG */ -#endif - -#ifndef GL_NV_fog_distance -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -/* reuse GL_EYE_PLANE */ -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif - -#ifndef GL_NV_blend_square -#endif - -#ifndef GL_NV_texture_env_combine4 -#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 -#endif - -#ifndef GL_MESA_resize_buffers -#endif - -#ifndef GL_MESA_window_pos -#endif - -#ifndef GL_EXT_texture_compression_s3tc -#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 -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_CULL_VERTEX_IBM 103050 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#endif - -#ifndef GL_IBM_vertex_array_lists -#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 -#endif - -#ifndef GL_SGIX_subsample -#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 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif - -#ifndef GL_SGI_depth_pass_instrument -#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 -#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 -#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif - -#ifndef GL_3DFX_tbuffer -#endif - -#ifndef GL_EXT_multisample -#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 -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif - -#ifndef GL_SGIX_resample -#define GL_PACK_RESAMPLE_SGIX 0x842C -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif - -#ifndef GL_SGIS_point_line_texgen -#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 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif - -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif - -#ifndef GL_NV_evaluators -#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 -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -#endif - -#ifndef GL_NV_texture_compression_vtc -#endif - -#ifndef GL_NV_texture_rectangle -#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 -#endif - -#ifndef GL_NV_texture_shader -#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_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV -#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV -#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV -#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 -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif - -#ifndef GL_NV_vertex_program -#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 -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif - -#ifndef GL_OML_interlace -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#endif - -#ifndef GL_OML_subsample -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif - -#ifndef GL_OML_resample -#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 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif - -#ifndef GL_ATI_envmap_bumpmap -#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 -#endif - -#ifndef GL_ATI_fragment_shader -#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_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#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_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#endif - -#ifndef GL_ATI_pn_triangles -#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 -#endif - -#ifndef GL_ATI_vertex_array_object -#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 -#endif - -#ifndef GL_EXT_vertex_shader -#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 -#endif - -#ifndef GL_ATI_vertex_streams -#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 -#endif - -#ifndef GL_ATI_element_array -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -#endif - -#ifndef GL_SUN_mesh_array -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_DEPTH_CLAMP_NV 0x864F -#endif - -#ifndef GL_NV_occlusion_query -#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 -#endif - -#ifndef GL_NV_point_sprite -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -#endif - -#ifndef GL_NV_texture_shader3 -#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 -#endif - -#ifndef GL_NV_vertex_program1_1 -#endif - -#ifndef GL_EXT_shadow_funcs -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif - -#ifndef GL_APPLE_element_array -#define GL_ELEMENT_ARRAY_APPLE 0x8A0C -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E -#endif - -#ifndef GL_APPLE_fence -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -#endif - -#ifndef GL_APPLE_vertex_array_range -#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_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CLIENT_APPLE 0x85B4 -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_YCBCR_422_APPLE 0x85B9 -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif - -#ifndef GL_S3_s3tc -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#endif - -#ifndef GL_ATI_draw_buffers -#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 -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif - -#ifndef GL_ATI_texture_float -#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 -#endif - -#ifndef GL_NV_float_buffer -#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 -#endif - -#ifndef GL_NV_fragment_program -#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 -#endif - -#ifndef GL_NV_half_float -#define GL_HALF_FLOAT_NV 0x140B -#endif - -#ifndef GL_NV_pixel_data_range -#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 -#endif - -#ifndef GL_NV_primitive_restart -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif - -#ifndef GL_NV_vertex_program2 -#endif - -#ifndef GL_ATI_map_object_buffer -#endif - -#ifndef GL_ATI_separate_stencil -#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 -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#endif - -#ifndef GL_OES_read_format -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -#endif - -#ifndef GL_MESA_pack_invert -#define GL_PACK_INVERT_MESA 0x8758 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#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 -#endif - -#ifndef GL_NV_fragment_program_option -#endif - -#ifndef GL_NV_fragment_program2 -#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 -#endif - -#ifndef GL_NV_vertex_program2_option -/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ -/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ -#endif - -#ifndef GL_NV_vertex_program3 -/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ -#endif - -#ifndef GL_EXT_framebuffer_object -#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 -#endif - -#ifndef GL_GREMEDY_string_marker -#endif - -#ifndef GL_EXT_packed_depth_stencil -#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 -#endif - -#ifndef GL_EXT_stencil_clear_tag -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -#endif - -#ifndef GL_EXT_texture_sRGB -#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 -#endif - -#ifndef GL_EXT_framebuffer_blit -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA -#endif - -#ifndef GL_EXT_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif - -#ifndef GL_MESAX_texture_stack -#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 -#endif - -#ifndef GL_EXT_timer_query -#define GL_TIME_ELAPSED_EXT 0x88BF -#endif - -#ifndef GL_EXT_gpu_program_parameters -#endif - -#ifndef GL_APPLE_flush_buffer_range -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -#endif - -#ifndef GL_NV_gpu_program4 -#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 -#endif - -#ifndef GL_NV_geometry_program4 -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#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_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#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_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -#endif - -#ifndef GL_EXT_geometry_shader4 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -/* reuse GL_GEOMETRY_VERTICES_OUT_EXT */ -/* reuse GL_GEOMETRY_INPUT_TYPE_EXT */ -/* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */ -/* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */ -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#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 -/* reuse GL_LINES_ADJACENCY_EXT */ -/* reuse GL_LINE_STRIP_ADJACENCY_EXT */ -/* reuse GL_TRIANGLES_ADJACENCY_EXT */ -/* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -/* reuse GL_PROGRAM_POINT_SIZE_EXT */ -#endif - -#ifndef GL_NV_vertex_program4 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD -#endif - -#ifndef GL_EXT_gpu_shader4 -#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 -#endif - -#ifndef GL_EXT_draw_instanced -#endif - -#ifndef GL_EXT_packed_float -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C -#endif - -#ifndef GL_EXT_texture_array -#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 -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -#endif - -#ifndef GL_EXT_texture_buffer_object -#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 -#endif - -#ifndef GL_EXT_texture_compression_latc -#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 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#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 -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F -#endif - -#ifndef GL_NV_depth_buffer_float -#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 -#endif - -#ifndef GL_NV_fragment_program4 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#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 -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#endif - -#ifndef GL_NV_geometry_shader4 -#endif - -#ifndef GL_NV_parameter_buffer_object -#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 -#endif - -#ifndef GL_EXT_draw_buffers2 -#endif - -#ifndef GL_NV_transform_feedback -#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_ATTRIBS_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 -#define GL_LAYER_NV 0x8DAA -#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 -#endif - -#ifndef GL_EXT_bindable_uniform -#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 -#endif - -#ifndef GL_EXT_texture_integer -#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 -#endif - -#ifndef GL_GREMEDY_frame_terminator -#endif - -#ifndef GL_NV_conditional_render -#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 -#endif - -#ifndef GL_NV_present_video -#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 -#endif - -#ifndef GL_EXT_transform_feedback -#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F -#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C -#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D -#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_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 -#endif - -#ifndef GL_EXT_direct_state_access -#define GL_PROGRAM_MATRIX_EXT 0x8E2D -#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E -#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F -#endif - -#ifndef GL_EXT_vertex_array_bgra -/* reuse GL_BGRA */ -#endif - -#ifndef GL_EXT_texture_swizzle -#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 -#endif - -#ifndef GL_NV_explicit_multisample -#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 -#endif - -#ifndef GL_NV_transform_feedback2 -#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 -#endif - -#ifndef GL_ATI_meminfo -#define GL_VBO_FREE_MEMORY_ATI 0x87FB -#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC -#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD -#endif - -#ifndef GL_AMD_performance_monitor -#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 -#endif - -#ifndef GL_AMD_texture_texture4 -#endif - -#ifndef GL_AMD_vertex_shader_tesselator -#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 -#endif - -#ifndef GL_EXT_provoking_vertex -#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 -#endif - -#ifndef GL_EXT_texture_snorm -#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 -/* reuse GL_RED_SNORM */ -/* reuse GL_RG_SNORM */ -/* reuse GL_RGB_SNORM */ -/* reuse GL_RGBA_SNORM */ -/* reuse GL_R8_SNORM */ -/* reuse GL_RG8_SNORM */ -/* reuse GL_RGB8_SNORM */ -/* reuse GL_RGBA8_SNORM */ -/* reuse GL_R16_SNORM */ -/* reuse GL_RG16_SNORM */ -/* reuse GL_RGB16_SNORM */ -/* reuse GL_RGBA16_SNORM */ -/* reuse GL_SIGNED_NORMALIZED */ -#endif - -#ifndef GL_AMD_draw_buffers_blend -#endif - -#ifndef GL_APPLE_texture_range -#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 -/* reuse GL_STORAGE_CACHED_APPLE */ -/* reuse GL_STORAGE_SHARED_APPLE */ -#endif - -#ifndef GL_APPLE_float_pixels -#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 -#endif - -#ifndef GL_APPLE_vertex_program_evaluators -#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 -#endif - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 -#endif - -#ifndef GL_APPLE_object_purgeable -#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 -#endif - -#ifndef GL_APPLE_row_bytes -#define GL_PACK_ROW_BYTES_APPLE 0x8A15 -#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 -#endif - -#ifndef GL_APPLE_rgb_422 -#define GL_RGB_422_APPLE 0x8A1F -/* reuse GL_UNSIGNED_SHORT_8_8_APPLE */ -/* reuse GL_UNSIGNED_SHORT_8_8_REV_APPLE */ -#endif - -#ifndef GL_NV_video_capture -#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 -#endif - -#ifndef GL_NV_copy_image -#endif - -#ifndef GL_EXT_separate_shader_objects -#define GL_ACTIVE_PROGRAM_EXT 0x8B8D -#endif - -#ifndef GL_NV_parameter_buffer_object2 -#endif - -#ifndef GL_NV_shader_buffer_load -#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D -#define GL_GPU_ADDRESS_NV 0x8F34 -#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 -#endif - -#ifndef GL_NV_vertex_buffer_unified_memory -#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 -#endif - -#ifndef GL_NV_texture_barrier -#endif - -#ifndef GL_AMD_shader_stencil_export -#endif - -#ifndef GL_AMD_seamless_cubemap_per_texture -/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB */ -#endif - -#ifndef GL_AMD_conservative_depth -#endif - -#ifndef GL_EXT_shader_image_load_store -#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_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_ALL_BARRIER_BITS_EXT 0xFFFFFFFF -#endif - -#ifndef GL_EXT_vertex_attrib_64bit -/* reuse GL_DOUBLE */ -#define GL_DOUBLE_VEC2_EXT 0x8FFC -#define GL_DOUBLE_VEC3_EXT 0x8FFD -#define GL_DOUBLE_VEC4_EXT 0x8FFE -#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 -#endif - -#ifndef GL_NV_gpu_program5 -#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_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 -#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 -#endif - -#ifndef GL_NV_gpu_shader5 -#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 -/* reuse GL_PATCHES */ -#endif - -#ifndef GL_NV_shader_buffer_store -#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 -/* reuse GL_READ_WRITE */ -/* reuse GL_WRITE_ONLY */ -#endif - -#ifndef GL_NV_tessellation_program5 -#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 -#endif - -#ifndef GL_NV_vertex_attrib_integer_64bit -/* reuse GL_INT64_NV */ -/* reuse GL_UNSIGNED_INT64_NV */ -#endif - -#ifndef GL_NV_multisample_coverage -#define GL_COVERAGE_SAMPLES_NV 0x80A9 -#define GL_COLOR_SAMPLES_NV 0x8E20 -#endif - -#ifndef GL_AMD_name_gen_delete -#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 -#endif - -#ifndef GL_AMD_debug_output -#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 -#endif - -#ifndef GL_NV_vdpau_interop -#define GL_SURFACE_STATE_NV 0x86EB -#define GL_SURFACE_REGISTERED_NV 0x86FD -#define GL_SURFACE_MAPPED_NV 0x8700 -#define GL_WRITE_DISCARD_NV 0x88BE -#endif - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#endif - - -/*************************************************************/ - -#include -#ifndef GL_VERSION_2_0 -/* GL type for program/shader text */ -typedef char GLchar; -#endif - -#ifndef GL_VERSION_1_5 -/* GL types for handling large vertex buffer objects */ -#if defined(__APPLE__) -typedef long GLintptr; -typedef long GLsizeiptr; -#else -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -#endif -#endif - -#ifndef GL_ARB_vertex_buffer_object -/* GL types for handling large vertex buffer objects */ -#if defined(__APPLE__) -typedef long GLintptrARB; -typedef long GLsizeiptrARB; -#else -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -#endif -#endif - -#ifndef GL_ARB_shader_objects -/* GL types for program/shader text and shader object handles */ -typedef char GLcharARB; -#if defined(__APPLE__) -typedef void *GLhandleARB; -#else -typedef unsigned int GLhandleARB; -#endif -#endif - -/* GL type for "half" precision (s10e5) float data in host memory */ -#ifndef GL_ARB_half_float_pixel -typedef unsigned short GLhalfARB; -#endif - -#ifndef GL_NV_half_float -typedef unsigned short GLhalfNV; -#endif - -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif - -#ifndef GL_EXT_timer_query -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif - -#ifndef GL_ARB_sync -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef struct __GLsync *GLsync; -#endif - -#ifndef GL_ARB_cl_event -/* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */ -struct _cl_context; -struct _cl_event; -#endif - -#ifndef GL_ARB_debug_output -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_AMD_debug_output -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_NV_vdpau_interop -typedef GLintptr GLvdpauSurfaceNV; -#endif - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GLAPI void APIENTRY glBlendEquation (GLenum mode); -GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); + * Datatypes + */ +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; /* 1-byte signed */ +typedef short GLshort; /* 2-byte signed */ +typedef int GLint; /* 4-byte signed */ +typedef unsigned char GLubyte; /* 1-byte unsigned */ +typedef unsigned short GLushort; /* 2-byte unsigned */ +typedef unsigned int GLuint; /* 4-byte unsigned */ +typedef int GLsizei; /* 4-byte signed */ +typedef float GLfloat; /* single precision float */ +typedef float GLclampf; /* single precision float in [0,1] */ +typedef double GLdouble; /* double precision float */ +typedef double GLclampd; /* double precision float in [0,1] */ + + + +/* + * Constants + */ + +/* Boolean values */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* Data types */ +#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 + +/* Primitives */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#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 0x0009 + +/* Vertex Arrays */ +#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_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 + +/* Matrix Mode */ +#define GL_MATRIX_MODE 0x0BA0 +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 + +/* Points */ +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_RANGE 0x0B12 + +/* Lines */ +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 + +/* Polygons */ +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#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_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 + +/* Display Lists */ +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_LIST_MODE 0x0B30 + +/* Depth buffer */ +#define GL_NEVER 0x0200 +#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_DEPTH_TEST 0x0B71 +#define GL_DEPTH_BITS 0x0D56 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_COMPONENT 0x1902 + +/* Lighting */ +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT0 0x4000 +#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_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_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_SHININESS 0x1601 +#define GL_EMISSION 0x1600 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_SHADE_MODEL 0x0B54 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_NORMALIZE 0x0BA1 + +/* User clipping planes */ +#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 + +/* Accumulation buffer */ +#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_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_ACCUM 0x0100 +#define GL_ADD 0x0104 +#define GL_LOAD 0x0101 +#define GL_MULT 0x0103 +#define GL_RETURN 0x0102 + +/* Alpha testing */ +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALPHA_TEST_FUNC 0x0BC1 + +/* Blending */ +#define GL_BLEND 0x0BE2 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_DST 0x0BE0 +#define GL_ZERO 0 +#define GL_ONE 1 +#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 + +/* Render Mode */ +#define GL_FEEDBACK 0x1C01 +#define GL_RENDER 0x1C00 +#define GL_SELECT 0x1C02 + +/* Feedback */ +#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_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 + +/* Selection */ +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 + +/* Fog */ +#define GL_FOG 0x0B60 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_COLOR 0x0B66 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_LINEAR 0x2601 +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 + +/* Logic Ops */ +#define GL_LOGIC_OP 0x0BF1 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_CLEAR 0x1500 +#define GL_SET 0x150F +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_NOOP 0x1505 +#define GL_INVERT 0x150A +#define GL_AND 0x1501 +#define GL_NAND 0x150E +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_XOR 0x1506 +#define GL_EQUIV 0x1509 +#define GL_AND_REVERSE 0x1502 +#define GL_AND_INVERTED 0x1504 +#define GL_OR_REVERSE 0x150B +#define GL_OR_INVERTED 0x150D + +/* Stencil */ +#define GL_STENCIL_BITS 0x0D57 +#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_STENCIL_INDEX 0x1901 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 + +/* Buffers, Pixel Drawing/Reading */ +#define GL_NONE 0 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +/*GL_FRONT 0x0404 */ +/*GL_BACK 0x0405 */ +/*GL_FRONT_AND_BACK 0x0408 */ +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_COLOR_INDEX 0x1900 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_ALPHA_BITS 0x0D55 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_INDEX_BITS 0x0D51 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_READ_BUFFER 0x0C02 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_BITMAP 0x1A00 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_DITHER 0x0BD0 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 + +/* Implementation limits */ +#define GL_MAX_LIST_NESTING 0x0B31 +#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 + +/* Gets */ +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_MODE 0x0C30 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_RENDER_MODE 0x0C40 +#define GL_RGBA_MODE 0x0C31 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_VIEWPORT 0x0BA2 + +/* Evaluators */ +#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_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 + +/* Hints */ +#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_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* Scissor box */ +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 + +/* Pixel Mode / Transfer */ +#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_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_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#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_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#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_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 + +/* Texture mapping */ +#define GL_TEXTURE_ENV 0x2300 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#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_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_COMPONENTS 0x1003 +#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_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_PLANE 0x2502 +#define GL_SPHERE_MAP 0x2402 +#define GL_DECAL 0x2101 +#define GL_MODULATE 0x2100 +#define GL_NEAREST 0x2600 +#define GL_REPEAT 0x2901 +#define GL_CLAMP 0x2900 +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 + +/* Utility */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* Errors */ +#define GL_NO_ERROR 0 +#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 + +/* glPush/PopAttrib bits */ +#define GL_CURRENT_BIT 0x00000001 +#define GL_POINT_BIT 0x00000002 +#define GL_LINE_BIT 0x00000004 +#define GL_POLYGON_BIT 0x00000008 +#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_BUFFER_BIT 0x00000200 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_HINT_BIT 0x00008000 +#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 + + +/* OpenGL 1.1 */ +#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_TEXTURE_INTERNAL_FORMAT 0x1003 +#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_R3_G3_B2 0x2A10 +#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_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF + + + +/* + * Miscellaneous + */ + +GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); + +GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glClear( GLbitfield mask ); + +GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); + +GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); + +GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); + +GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); + +GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); + +GLAPI void GLAPIENTRY glCullFace( GLenum mode ); + +GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); + +GLAPI void GLAPIENTRY glPointSize( GLfloat size ); + +GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); + +GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); + +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 glGetPolygonStipple( GLubyte *mask ); + +GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); + +GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); + +GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); + +GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); + +GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); + +GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glEnable( GLenum cap ); + +GLAPI void GLAPIENTRY glDisable( GLenum cap ); + +GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); + + +GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ + +GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ + + +GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); + +GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); + +GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); + +GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); + +GLAPI void GLAPIENTRY glPopAttrib( void ); + + +GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ + +GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ + + +GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); + +GLAPI GLenum GLAPIENTRY glGetError( void ); + +GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); + +GLAPI void GLAPIENTRY glFinish( void ); + +GLAPI void GLAPIENTRY glFlush( void ); + +GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); + + +/* + * Depth Buffer + */ + +GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); + +GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); + +GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); + +GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); + + +/* + * Accumulation Buffer + */ + +GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); + +GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); + + +/* + * Transformation + */ + +GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); + +GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, + GLsizei width, GLsizei height ); + +GLAPI void GLAPIENTRY glPushMatrix( void ); + +GLAPI void GLAPIENTRY glPopMatrix( void ); + +GLAPI void GLAPIENTRY glLoadIdentity( void ); + +GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); + +GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); + +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 glTranslated( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); + + +/* + * Display Lists + */ + +GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); + +GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); + +GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); + +GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); + +GLAPI void GLAPIENTRY glEndList( void ); + +GLAPI void GLAPIENTRY glCallList( GLuint list ); + +GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, + const GLvoid *lists ); + +GLAPI void GLAPIENTRY glListBase( GLuint base ); + + +/* + * Drawing Functions + */ + +GLAPI void GLAPIENTRY glBegin( GLenum mode ); + +GLAPI void GLAPIENTRY glEnd( void ); + + +GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); +GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); +GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); +GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); +GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); + +GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); +GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glIndexd( GLdouble c ); +GLAPI void GLAPIENTRY glIndexf( GLfloat c ); +GLAPI void GLAPIENTRY glIndexi( GLint c ); +GLAPI void GLAPIENTRY glIndexs( GLshort c ); +GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); +GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); +GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); +GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); +GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); +GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); +GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); +GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); +GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); +GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); +GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); +GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); + +GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, + GLbyte blue, GLbyte alpha ); +GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, + GLdouble blue, GLdouble alpha ); +GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, + GLfloat blue, GLfloat alpha ); +GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, + GLint blue, GLint alpha ); +GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, + GLshort blue, GLshort alpha ); +GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, + GLubyte blue, GLubyte alpha ); +GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, + GLuint blue, GLuint alpha ); +GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, + GLushort blue, GLushort alpha ); + + +GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); + +GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); + + +GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); +GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); +GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); +GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); + +GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); +GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); +GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); +GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); +GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); +GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); +GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); +GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); +GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); +GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); +GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); +GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); +GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); + + +GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); +GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); +GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); +GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); + + +/* + * Vertex Arrays (1.1) + */ + +GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); + +GLAPI void GLAPIENTRY glArrayElement( GLint i ); + +GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); + +GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, + GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, + const GLvoid *pointer ); + +/* + * Lighting + */ + +GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); + +GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, + const 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 glLightModelf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); + +GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); + + +/* + * Raster functions + */ + +GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); + +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 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 glGetPixelMapfv( GLenum map, GLfloat *values ); +GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); +GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); + +GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, + GLfloat xorig, GLfloat yorig, + GLfloat xmove, GLfloat ymove, + const GLubyte *bitmap ); + +GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + GLvoid *pixels ); + +GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum type ); + +/* + * Stenciling + */ + +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 glClearStencil( GLint s ); + + + +/* + * Texture mapping + */ + +GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); +GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); +GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const 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 glTexEnvf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, + const 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 glGetTexLevelParameterfv( GLenum target, GLint level, + GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, + GLenum pname, 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 glGetTexImage( GLenum target, GLint level, + GLenum format, GLenum type, + GLvoid *pixels ); + + +/* 1.1 functions */ + +GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); + +GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); + +GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); + +GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, + const GLuint *textures, + const GLclampf *priorities ); + +GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, + const GLuint *textures, + GLboolean *residences ); + +GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); + + +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 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 ); + + +/* + * Evaluators + */ + +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 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 glEvalCoord1d( GLdouble u ); +GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); + +GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); + +GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); +GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); + +GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); + +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 glEvalPoint1( GLint i ); + +GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); + +GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); + +GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); + + +/* + * Fog + */ + +GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); + +GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); + +GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); + + +/* + * Selection and Feedback + */ + +GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); + +GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); + +GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); + +GLAPI void GLAPIENTRY glInitNames( void ); + +GLAPI void GLAPIENTRY glLoadName( GLuint name ); + +GLAPI void GLAPIENTRY glPushName( GLuint name ); + +GLAPI void GLAPIENTRY glPopName( void ); + + + +/* + * OpenGL 1.2 + */ + +#define GL_RESCALE_NORMAL 0x803A +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#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 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#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_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_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#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_TEXTURE_BINDING_3D 0x806A + +GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, + GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLsizei depth, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLenum format, + GLenum type, const GLvoid *pixels); + +GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLint x, + GLint y, GLsizei width, + GLsizei height ); + typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (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 (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif -#ifndef GL_VERSION_1_2_DEPRECATED -#define GL_VERSION_1_2_DEPRECATED 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogram (GLenum target); -GLAPI void APIENTRY glResetMinmax (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -#endif -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum texture); -GLAPI void APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img); -#endif /* GL_GLEXT_PROTOTYPES */ +/* + * GL_ARB_imaging + */ + +#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_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_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_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#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_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_BLEND_EQUATION 0x8009 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_BLEND_COLOR 0x8005 + + +GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, + GLsizei width, GLenum format, + GLenum type, const GLvoid *table ); + +GLAPI void GLAPIENTRY glColorSubTable( GLenum target, + GLsizei start, GLsizei count, + GLenum format, GLenum type, + const GLvoid *data ); + +GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, + const GLint *params); + +GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, + const GLfloat *params); + +GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, + GLenum type, GLvoid *table ); + +GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); + +GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, + GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, + GLenum internalformat, GLboolean sink ); + +GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); + +GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, + GLenum format, GLenum type, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, + GLboolean sink ); + +GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); + +GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, + GLenum format, GLenum types, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, + GLenum internalformat, GLsizei width, GLenum format, GLenum type, + const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, + GLfloat params ); + +GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); + +GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, + GLint params ); + +GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width, + GLsizei height); + +GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, + GLenum type, GLvoid *image ); + +GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *row, const GLvoid *column ); + +GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, + GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); + + + + +/* + * OpenGL 1.3 + */ + +/* multitexture */ +#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 +/* texture_cube_map */ +#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 +/* texture_compression */ +#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_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +/* multisample */ +#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_MULTISAMPLE_BIT 0x20000000 +/* transpose_matrix */ +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +/* texture_env_combine */ +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#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_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +/* texture_env_dot3 */ +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +/* texture_border_clamp */ +#define GL_CLAMP_TO_BORDER 0x812D + +GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); + +GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); + + +GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); + + typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); @@ -5323,699 +1971,86 @@ typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); -#endif -#ifndef GL_VERSION_1_3_DEPRECATED -#define GL_VERSION_1_3_DEPRECATED 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClientActiveTexture (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -#endif -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_VERSION_1_4_DEPRECATED -#define GL_VERSION_1_4_DEPRECATED 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordf (GLfloat coord); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); -GLAPI void APIENTRY glFogCoordd (GLdouble coord); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2iv (const GLint *v); -GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); -GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3iv (const GLint *v); -GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); -#endif - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQuery (GLuint id); -GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQuery (GLenum target); -GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); -GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); -GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -GLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); -GLAPI void APIENTRY glCompileShader (GLuint shader); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum type); -GLAPI void APIENTRY glDeleteProgram (GLuint program); -GLAPI void APIENTRY glDeleteShader (GLuint shader); -GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgram (GLuint program); -GLAPI GLboolean APIENTRY glIsShader (GLuint shader); -GLAPI void APIENTRY glLinkProgram (GLuint program); -GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -GLAPI void APIENTRY glUseProgram (GLuint program); -GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glValidateProgram (GLuint program); -GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif - -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 -/* OpenGL 3.0 also reuses entry points from these extensions: */ -/* ARB_framebuffer_object */ -/* ARB_map_buffer_range */ -/* ARB_vertex_array_object */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); -GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); -GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedback (void); -GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); -GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRender (void); -GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); -GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI const GLubyte * APIENTRY glGetStringi (GLenum name, GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); -#endif - -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 -/* OpenGL 3.1 also reuses entry points from these extensions: */ -/* ARB_copy_buffer */ -/* ARB_uniform_buffer_object */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); -#endif - -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 -/* OpenGL 3.2 also reuses entry points from these extensions: */ -/* ARB_draw_elements_base_vertex */ -/* ARB_provoking_vertex */ -/* ARB_sync */ -/* ARB_texture_multisample */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); -GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif - -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 -/* OpenGL 3.3 also reuses entry points from these extensions: */ -/* ARB_blend_func_extended */ -/* ARB_sampler_objects */ -/* ARB_explicit_attrib_location, but it has none */ -/* ARB_occlusion_query2 (no entry points) */ -/* ARB_shader_bit_encoding (no entry points) */ -/* ARB_texture_rgb10_a2ui (no entry points) */ -/* ARB_texture_swizzle (no entry points) */ -/* ARB_timer_query */ -/* ARB_vertex_type_2_10_10_10_rev */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); -#endif - -#ifndef GL_VERSION_4_0 -#define GL_VERSION_4_0 1 -/* OpenGL 4.0 also reuses entry points from these extensions: */ -/* ARB_texture_query_lod (no entry points) */ -/* ARB_draw_indirect */ -/* ARB_gpu_shader5 (no entry points) */ -/* ARB_gpu_shader_fp64 */ -/* ARB_shader_subroutine */ -/* ARB_tessellation_shader */ -/* ARB_texture_buffer_object_rgb32 (no entry points) */ -/* ARB_texture_cube_map_array (no entry points) */ -/* ARB_texture_gather (no entry points) */ -/* ARB_transform_feedback2 */ -/* ARB_transform_feedback3 */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShading (GLclampf value); -GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLclampf value); -typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif - -#ifndef GL_VERSION_4_1 -#define GL_VERSION_4_1 1 -/* OpenGL 4.1 also reuses entry points from these extensions: */ -/* ARB_ES2_compatibility */ -/* ARB_get_program_binary */ -/* ARB_separate_shader_objects */ -/* ARB_shader_precision (no entry points) */ -/* ARB_vertex_attrib_64bit */ -/* ARB_viewport_array */ -#endif +/* + * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) + */ #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ + +#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 + +GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); +GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); +GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); +GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); +GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); +GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); +GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); +GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); +GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); +GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); + typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); @@ -6050,5074 +2085,89 @@ typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GL typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#endif -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -#endif +#endif /* GL_ARB_multitexture */ -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLclampf value, GLboolean invert); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); -#endif -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#endif - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#endif - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); -GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); -GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); -GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); -GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); -GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); -GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); -GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); -GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glVertexBlendARB (GLint count); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); -#endif - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#endif - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#endif - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 -#endif - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); -#endif - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); -#endif - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ -#endif - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); -GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); -GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQueryARB (GLenum target); -GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); -GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -#endif - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 -#endif - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#endif - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -#endif - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#endif - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#endif - -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 -#endif - -#ifndef GL_ARB_draw_instanced -#define GL_ARB_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmap (GLenum target); -GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 -#endif - -#ifndef GL_ARB_geometry_shader4 -#define GL_ARB_geometry_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); -GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif - -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 -#endif - -#ifndef GL_ARB_instanced_arrays -#define GL_ARB_instanced_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); -#endif - -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -#endif - -#ifndef GL_ARB_texture_buffer_object -#define GL_ARB_texture_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#endif - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 -#endif - -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 -#endif - -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArray (GLuint array); -GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); -#endif - -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices); -GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); -GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif - -#ifndef GL_ARB_compatibility -#define GL_ARB_compatibility 1 -#endif - -#ifndef GL_ARB_copy_buffer -#define GL_ARB_copy_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#endif - -#ifndef GL_ARB_shader_texture_lod -#define GL_ARB_shader_texture_lod 1 -#endif - -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 -#endif - -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); -GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, const GLint *basevertex); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, const GLint *basevertex); -#endif - -#ifndef GL_ARB_fragment_coord_conventions -#define GL_ARB_fragment_coord_conventions 1 -#endif - -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProvokingVertex (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); -#endif - -#ifndef GL_ARB_seamless_cube_map -#define GL_ARB_seamless_cube_map 1 -#endif - -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); -GLAPI GLboolean APIENTRY glIsSync (GLsync sync); -GLAPI void APIENTRY glDeleteSync (GLsync sync); -GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); -typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif - -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaski (GLuint index, GLbitfield mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask); -#endif - -#ifndef GL_ARB_vertex_array_bgra -#define GL_ARB_vertex_array_bgra 1 -#endif - -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif - -#ifndef GL_ARB_sample_shading -#define GL_ARB_sample_shading 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShadingARB (GLclampf value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLclampf value); -#endif - -#ifndef GL_ARB_texture_cube_map_array -#define GL_ARB_texture_cube_map_array 1 -#endif - -#ifndef GL_ARB_texture_gather -#define GL_ARB_texture_gather 1 -#endif - -#ifndef GL_ARB_texture_query_lod -#define GL_ARB_texture_query_lod 1 -#endif - -#ifndef GL_ARB_shading_language_include -#define GL_ARB_shading_language_include 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); -GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); -typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_texture_compression_bptc -#define GL_ARB_texture_compression_bptc 1 -#endif - -#ifndef GL_ARB_blend_func_extended -#define GL_ARB_blend_func_extended 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); -#endif - -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 -#endif - -#ifndef GL_ARB_occlusion_query2 -#define GL_ARB_occlusion_query2 1 -#endif - -#ifndef GL_ARB_sampler_objects -#define GL_ARB_sampler_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); -GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); -GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); -GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); -GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); -GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); -GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); -GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_ARB_texture_rgb10_a2ui 1 -#endif - -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 -#endif - -#ifndef GL_ARB_timer_query -#define GL_ARB_timer_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); -GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); -#endif - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -#define GL_ARB_vertex_type_2_10_10_10_rev 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -#endif - -#ifndef GL_ARB_draw_indirect -#define GL_ARB_draw_indirect 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const GLvoid *indirect); -GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect); -#endif - -#ifndef GL_ARB_gpu_shader5 -#define GL_ARB_gpu_shader5 1 -#endif - -#ifndef GL_ARB_gpu_shader_fp64 -#define GL_ARB_gpu_shader_fp64 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); -GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); -#endif - -#ifndef GL_ARB_shader_subroutine -#define GL_ARB_shader_subroutine 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); -GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); -GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); -typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -#endif - -#ifndef GL_ARB_tessellation_shader -#define GL_ARB_tessellation_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); -GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); -#endif - -#ifndef GL_ARB_texture_buffer_object_rgb32 -#define GL_ARB_texture_buffer_object_rgb32 1 -#endif - -#ifndef GL_ARB_transform_feedback2 -#define GL_ARB_transform_feedback2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedback (void); -GLAPI void APIENTRY glResumeTransformFeedback (void); -GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); -#endif - -#ifndef GL_ARB_transform_feedback3 -#define GL_ARB_transform_feedback3 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); -GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); -GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); -GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); -typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReleaseShaderCompiler (void); -GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); -GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -GLAPI void APIENTRY glDepthRangef (GLclampf n, GLclampf f); -GLAPI void APIENTRY glClearDepthf (GLclampf d); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); -typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLclampf n, GLclampf f); -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLclampf d); -#endif - -#ifndef GL_ARB_get_program_binary -#define GL_ARB_get_program_binary 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); -#endif - -#ifndef GL_ARB_separate_shader_objects -#define GL_ARB_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); -GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* *strings); -GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); -GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); -GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); -GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); -GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* *strings); -typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); -typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif - -#ifndef GL_ARB_vertex_attrib_64bit -#define GL_ARB_vertex_attrib_64bit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); -#endif - -#ifndef GL_ARB_viewport_array -#define GL_ARB_viewport_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); -GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); -GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLclampd *v); -GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLclampd n, GLclampd f); -GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLclampd *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLclampd n, GLclampd f); -typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); -#endif - -#ifndef GL_ARB_cl_event -#define GL_ARB_cl_event 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); -#endif - -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif - -#ifndef GL_ARB_robustness -#define GL_ARB_robustness 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); -GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); -GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); -GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); -GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); -GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); -GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); -GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); -GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); -GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); -typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); -typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); -typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); -typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -#endif - -#ifndef GL_ARB_shader_stencil_export -#define GL_ARB_shader_stencil_export 1 -#endif - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#endif - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#endif - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#endif - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogramEXT (GLenum target); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); -#endif - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -#endif - -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 -#endif - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY 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 GLvoid *pixels); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP 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 GLvoid *pixels); -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#endif - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#endif - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#endif - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#endif - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint i); -GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); -GLAPI void APIENTRY glGetPointervEXT (GLenum pname, GLvoid* *params); -GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#endif - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#endif - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#endif - -#ifndef GL_SGIX_texture_select -#define GL_SGIX_texture_select 1 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#endif - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); -GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#endif - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY 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); -GLAPI void APIENTRY 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); -GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP 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 (APIENTRYP 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 (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#endif - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#endif - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#endif - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); -GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); -GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#endif - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); -GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#endif - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#endif - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); -GLAPI void APIENTRY glTextureLightEXT (GLenum pname); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#endif - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#endif - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const GLvoid* *pointer); -GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -#endif - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#endif - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); -GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); -GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); -GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_SGIX_fog_scale 1 -#endif - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#endif - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -#endif - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid* *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); -#endif - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY 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); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY 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); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY 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); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#endif - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); -#endif - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); -#endif - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#endif - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#endif - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#endif - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean* *pointer, GLint ptrstride); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -#endif - -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#endif - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#endif - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#endif - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif - -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const GLvoid *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#endif - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); -GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); -GLAPI void APIENTRY glFinishFenceNV (GLuint fence); -GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -#endif - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -#endif - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -#endif - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); -GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); -GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); -GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLuint count, const GLdouble *v); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLuint count, const GLfloat *v); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v); -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#endif - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -#endif - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -#endif - -#ifndef GL_OML_resample -#define GL_OML_resample 1 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -#endif - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -#endif - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glBeginFragmentShaderATI (void); -GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); -GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY 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); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY 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); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); -#endif - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); -#endif - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVertexShaderEXT (void); -GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); -GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); -GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const GLvoid *addr); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const GLvoid *addr); -GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); -GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); -GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); -GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); -GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); -GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); -GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); -GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); -GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid* *data); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); -GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); -GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum type, const GLvoid *pointer); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#endif - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -#endif - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -#endif - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#endif - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const GLvoid *pointer); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); -#endif - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#endif - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -#endif - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_ATI_pixel_format_float 1 -/* This is really a WGL extension, but defines some associated GL enums. - * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. +/* + * Define this token if you want "old-style" header file behaviour (extensions + * defined in gl.h). Otherwise, extensions will be included from glext.h. */ +#if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) +#include "SDL_opengl_glext.h" +#endif /* GL_GLEXT_LEGACY */ + + + +/* + * ???. GL_MESA_packed_depth_stencil + * XXX obsolete + */ +#ifndef GL_MESA_packed_depth_stencil +#define GL_MESA_packed_depth_stencil 1 + +#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 + +#endif /* GL_MESA_packed_depth_stencil */ + + +#ifndef GL_ATI_blend_equation_separate +#define GL_ATI_blend_equation_separate 1 + +#define GL_ALPHA_BLEND_EQUATION_ATI 0x883D + +GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA ); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA); + +#endif /* GL_ATI_blend_equation_separate */ + + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; #endif -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#endif - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 -#endif - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -#endif - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 #ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); #endif - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -#endif - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, GLvoid *pointer); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -#endif - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -#endif - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -#endif - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); -#endif - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); -#endif - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 -#endif - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -#endif - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -#endif - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#endif - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#endif - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const GLvoid *string); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); -#endif - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 -#endif - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -#endif - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 -#endif - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); -#endif - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); -#endif - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -#endif - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); -GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -#endif - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -#endif - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -#endif - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 -#endif - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 -#endif - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#endif - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 -#endif - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); -GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -#endif - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 -#endif - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 +typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); #endif -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -#endif - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); -GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); -#endif - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackNV (void); -GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); -GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); -GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); -GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#endif - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); -GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); -GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); -typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -#endif - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif - -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); -#endif - -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRenderNV (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); -#endif - -#ifndef GL_NV_present_video -#define GL_NV_present_video 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -GLAPI void APIENTRY 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); -GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); -GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP 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 (APIENTRYP 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 (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#endif - -#ifndef GL_EXT_transform_feedback -#define GL_EXT_transform_feedback 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackEXT (void); -GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#endif - -#ifndef GL_EXT_direct_state_access -#define GL_EXT_direct_state_access 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); -GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); -GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); -GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY 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); -GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY 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); -GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); -GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); -GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, GLvoid* *data); -GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY 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 *bits); -GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, GLvoid *img); -GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY 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 *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, GLvoid *img); -GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); -GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, GLvoid *string); -GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); -GLAPI GLvoid* APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); -GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); -GLAPI GLvoid* APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, GLvoid* *params); -GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); -GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); -GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); -GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); -GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); -GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP 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 void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); -typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid* *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP 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 *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, GLvoid *img); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP 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 *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, GLvoid *img); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid *string); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); -typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); -typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -#endif - -#ifndef GL_EXT_vertex_array_bgra -#define GL_EXT_vertex_array_bgra 1 -#endif -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 -#endif +/** + ** NOTE!!!!! If you add new functions to this file, or update + ** glext.h be sure to regenerate the gl_mangle.h file. See comments + ** in that file for details. + **/ -#ifndef GL_NV_explicit_multisample -#define GL_NV_explicit_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); -GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); -typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); -#endif -#ifndef GL_NV_transform_feedback2 -#define GL_NV_transform_feedback2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedbackNV (void); -GLAPI void APIENTRY glResumeTransformFeedbackNV (void); -GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); -#endif -#ifndef GL_ATI_meminfo -#define GL_ATI_meminfo 1 +/********************************************************************** + * Begin system-specific stuff + */ +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export off #endif -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif - -#ifndef GL_AMD_texture_texture4 -#define GL_AMD_texture_texture4 1 -#endif - -#ifndef GL_AMD_vertex_shader_tesselator -#define GL_AMD_vertex_shader_tesselator 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); -GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_provoking_vertex -#define GL_EXT_provoking_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_texture_snorm -#define GL_EXT_texture_snorm 1 -#endif - -#ifndef GL_AMD_draw_buffers_blend -#define GL_AMD_draw_buffers_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#endif - -#ifndef GL_APPLE_texture_range -#define GL_APPLE_texture_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const GLvoid *pointer); -GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_APPLE_float_pixels -#define GL_APPLE_float_pixels 1 -#endif - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_APPLE_vertex_program_evaluators 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -typedef void (APIENTRYP 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 (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#endif - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_APPLE_aux_depth_stencil 1 -#endif - -#ifndef GL_APPLE_object_purgeable -#define GL_APPLE_object_purgeable 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#endif - -#ifndef GL_APPLE_row_bytes -#define GL_APPLE_row_bytes 1 -#endif - -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#endif - -#ifndef GL_NV_video_capture -#define GL_NV_video_capture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#endif - -#ifndef GL_NV_copy_image -#define GL_NV_copy_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY 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); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP 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); -#endif - -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); -GLAPI void APIENTRY glActiveProgramEXT (GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); -typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); -#endif - -#ifndef GL_NV_parameter_buffer_object2 -#define GL_NV_parameter_buffer_object2 1 -#endif - -#ifndef GL_NV_shader_buffer_load -#define GL_NV_shader_buffer_load 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); -GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); -GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); -GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); -GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); -GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); -GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); -GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); -GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); -GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); -GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); -typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); -typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); -typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); -typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_NV_vertex_buffer_unified_memory 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); -GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); -#endif - -#ifndef GL_NV_texture_barrier -#define GL_NV_texture_barrier 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureBarrierNV (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); -#endif - -#ifndef GL_AMD_shader_stencil_export -#define GL_AMD_shader_stencil_export 1 -#endif - -#ifndef GL_AMD_seamless_cubemap_per_texture -#define GL_AMD_seamless_cubemap_per_texture 1 -#endif - -#ifndef GL_AMD_conservative_depth -#define GL_AMD_conservative_depth 1 -#endif - -#ifndef GL_EXT_shader_image_load_store -#define GL_EXT_shader_image_load_store 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); -#endif - -#ifndef GL_EXT_vertex_attrib_64bit -#define GL_EXT_vertex_attrib_64bit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -#endif - -#ifndef GL_NV_gpu_program5 -#define GL_NV_gpu_program5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); -#endif - -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); -GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); -GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); -GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); -GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); -GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif - -#ifndef GL_NV_shader_buffer_store -#define GL_NV_shader_buffer_store 1 -#endif - -#ifndef GL_NV_tessellation_program5 -#define GL_NV_tessellation_program5 1 -#endif - -#ifndef GL_NV_vertex_attrib_integer_64bit -#define GL_NV_vertex_attrib_integer_64bit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); -GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); -GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -#endif - -#ifndef GL_NV_multisample_coverage -#define GL_NV_multisample_coverage 1 -#endif - -#ifndef GL_AMD_name_gen_delete -#define GL_AMD_name_gen_delete 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); -GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); -GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); -typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); -typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); -#endif - -#ifndef GL_AMD_debug_output -#define GL_AMD_debug_output 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, GLvoid *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#endif - -#ifndef GL_NV_vdpau_interop -#define GL_NV_vdpau_interop 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVDPAUInitNV (const GLvoid *vdpDevice, const GLvoid *getProcAddress); -GLAPI void APIENTRY glVDPAUFiniNV (void); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI void APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); -GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const GLvoid *vdpDevice, const GLvoid *getProcAddress); -typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef void (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); -typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#endif - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#define GL_AMD_transform_feedback3_lines_triangles 1 -#endif +/* + * End system-specific stuff + **********************************************************************/ #ifdef __cplusplus } #endif -#endif -#endif /* NO_SDL_GLEXT */ +#endif /* __gl_h_ */ #endif /* !__IPHONEOS__ */ diff --git a/code/SDL2/include/SDL_opengl_glext.h b/code/SDL2/include/SDL_opengl_glext.h new file mode 100644 index 00000000..cd3869fe --- /dev/null +++ b/code/SDL2/include/SDL_opengl_glext.h @@ -0,0 +1,11177 @@ +#ifndef __glext_h_ +#define __glext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright (c) 2013-2014 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. +*/ +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 26745 $ on $Date: 2014-05-21 03:12:26 -0700 (Wed, 21 May 2014) $ +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif + +#define GL_GLEXT_VERSION 20140521 + +/* Generated C header for: + * API: gl + * Profile: compatibility + * Versions considered: .* + * Versions emitted: 1\.[2-9]|[234]\.[0-9] + * Default extensions included: gl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +#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_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_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_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#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_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_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_RESCALE_NORMAL 0x803A +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_VERSION_1_2 */ + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +#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_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_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_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#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_CLAMP_TO_BORDER 0x812D +#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_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#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_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum texture); +GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); +GLAPI void APIENTRY glClientActiveTexture (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); +#endif +#endif /* GL_VERSION_1_3 */ + +#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_FADE_THRESHOLD_SIZE 0x8128 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#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_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFogCoordf (GLfloat coord); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); +GLAPI void APIENTRY glFogCoordd (GLdouble coord); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2iv (const GLint *v); +GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); +GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3iv (const GLint *v); +GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); +GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void APIENTRY glBlendEquation (GLenum mode); +#endif +#endif /* GL_VERSION_1_4 */ + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +#include +#ifdef __MACOSX__ +typedef long GLsizeiptr; +typedef long GLintptr; +#else +typedef ptrdiff_t GLsizeiptr; +typedef ptrdiff_t GLintptr; +#endif +#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_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 +#define GL_SRC1_ALPHA 0x8589 +#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_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_RGB 0x8582 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC2_ALPHA 0x858A +typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQuery (GLuint id); +GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQuery (GLenum target); +GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); +GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_VERSION_1_5 */ + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +typedef char GLchar; +#define GL_BLEND_EQUATION_RGB 0x8009 +#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_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_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#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 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_TEXTURE_COORDS 0x8871 +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); +GLAPI void APIENTRY glCompileShader (GLuint shader); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum type); +GLAPI void APIENTRY glDeleteProgram (GLuint program); +GLAPI void APIENTRY glDeleteShader (GLuint shader); +GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgram (GLuint program); +GLAPI GLboolean APIENTRY glIsShader (GLuint shader); +GLAPI void APIENTRY glLinkProgram (GLuint program); +GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI void APIENTRY glUseProgram (GLuint program); +GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glValidateProgram (GLuint program); +GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#endif +#endif /* GL_VERSION_2_0 */ + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +#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_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif +#endif /* GL_VERSION_2_1 */ + +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +typedef unsigned short GLhalf; +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#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_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#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_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 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#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_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_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_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_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 +#define GL_INDEX 0x8222 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_HALF_FLOAT 0x140B +#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 +#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 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 GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_ALPHA_INTEGER 0x8D97 +typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); +GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); +GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedback (void); +GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); +GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRender (void); +GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); +GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); +GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmap (GLenum target); +GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glBindVertexArray (GLuint array); +GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); +#endif +#endif /* GL_VERSION_3_0 */ + +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#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_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_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#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_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#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_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_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_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFFu +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); +GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); +GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#endif +#endif /* GL_VERSION_3_1 */ + +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +typedef struct __GLsync *GLsync; +#ifndef GLEXT_64_TYPES_DEFINED +/* This code block is duplicated in glxext.h, so must be protected */ +#define GLEXT_64_TYPES_DEFINED +/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ +/* (as used in the GL_EXT_timer_query extension). */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include +#elif defined(__sun__) || defined(__digital__) +#include +#if defined(__STDC__) +#if defined(__arch64__) || defined(_LP64) +typedef long int int64_t; +typedef unsigned long int uint64_t; +#else +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#endif /* __arch64__ */ +#endif /* __STDC__ */ +#elif defined( __VMS ) || defined(__sgi) +#include +#elif defined(__SCO__) || defined(__USLC__) +#include +#elif defined(__UNIXOS2__) || defined(__SOL64__) +typedef long int int32_t; +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#elif defined(_WIN32) && defined(__GNUC__) +#include +#elif defined(_WIN32) +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +/* Fallback if nothing above works */ +#include +#endif +#endif +typedef uint64_t GLuint64; +typedef int64_t GLint64; +#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_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_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#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 +#define GL_DEPTH_CLAMP 0x864F +#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 +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#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 0xFFFFFFFFFFFFFFFFull +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#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 (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); +typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); +typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +GLAPI void APIENTRY glProvokingVertex (GLenum mode); +GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); +GLAPI GLboolean APIENTRY glIsSync (GLsync sync); +GLAPI void APIENTRY glDeleteSync (GLsync sync); +GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); +GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); +GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); +#endif +#endif /* GL_VERSION_3_2 */ + +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#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 +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_RGB10_A2UI 0x906F +#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 GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#define GL_INT_2_10_10_10_REV 0x8D9F +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); +GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); +GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); +GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); +GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); +GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); +GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); +GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); +GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); +GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); +GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); +GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); +#endif +#endif /* GL_VERSION_3_3 */ + +#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_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 +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#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 GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#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_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_PATCHES 0x000E +#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_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#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_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#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 +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); +typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); +typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); +typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); +typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShading (GLfloat value); +GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); +GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); +GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); +GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); +GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); +GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); +GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); +GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); +GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedback (void); +GLAPI void APIENTRY glResumeTransformFeedback (void); +GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); +GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); +GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); +GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); +GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_VERSION_4_0 */ + +#ifndef GL_VERSION_4_1 +#define GL_VERSION_4_1 1 +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#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_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RGB565 0x8D62 +#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 +#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_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#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 +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); +typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); +typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReleaseShaderCompiler (void); +GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); +GLAPI void APIENTRY glClearDepthf (GLfloat d); +GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); +GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); +GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); +GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); +GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); +GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); +GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); +GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); +#endif +#endif /* GL_VERSION_4_1 */ + +#ifndef GL_VERSION_4_2 +#define GL_VERSION_4_2 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 GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#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_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#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_ALL_BARRIER_BITS 0xFFFFFFFF +#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_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 GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); +typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); +GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); +GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#endif +#endif /* GL_VERSION_4_2 */ + +#ifndef GL_VERSION_4_3 +#define GL_VERSION_4_3 1 +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#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 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_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#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_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_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#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_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_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_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_MAX_LABEL_LENGTH 0x82E8 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#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 +#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_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_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_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 +#define GL_IS_PER_PATCH 0x92E7 +#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 +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#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 +#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_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_DISPLAY_LIST 0x82E7 +typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); +typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); +GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); +GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); +GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GLAPI void APIENTRY glPopDebugGroup (void); +GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_VERSION_4_3 */ + +#ifndef GL_VERSION_4_4 +#define GL_VERSION_4_4 1 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_COHERENT_BIT 0x0080 +#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 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); +GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#endif +#endif /* GL_VERSION_4_4 */ + +#ifndef GL_ARB_ES2_compatibility +#define GL_ARB_ES2_compatibility 1 +#endif /* GL_ARB_ES2_compatibility */ + +#ifndef GL_ARB_ES3_compatibility +#define GL_ARB_ES3_compatibility 1 +#endif /* GL_ARB_ES3_compatibility */ + +#ifndef GL_ARB_arrays_of_arrays +#define GL_ARB_arrays_of_arrays 1 +#endif /* GL_ARB_arrays_of_arrays */ + +#ifndef GL_ARB_base_instance +#define GL_ARB_base_instance 1 +#endif /* GL_ARB_base_instance */ + +#ifndef GL_ARB_bindless_texture +#define GL_ARB_bindless_texture 1 +typedef uint64_t GLuint64EXT; +#define GL_UNSIGNED_INT64_ARB 0x140F +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_ARB_bindless_texture */ + +#ifndef GL_ARB_blend_func_extended +#define GL_ARB_blend_func_extended 1 +#endif /* GL_ARB_blend_func_extended */ + +#ifndef GL_ARB_buffer_storage +#define GL_ARB_buffer_storage 1 +#endif /* GL_ARB_buffer_storage */ + +#ifndef GL_ARB_cl_event +#define GL_ARB_cl_event 1 +struct _cl_context; +struct _cl_event; +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#endif +#endif /* GL_ARB_cl_event */ + +#ifndef GL_ARB_clear_buffer_object +#define GL_ARB_clear_buffer_object 1 +#endif /* GL_ARB_clear_buffer_object */ + +#ifndef GL_ARB_clear_texture +#define GL_ARB_clear_texture 1 +#endif /* GL_ARB_clear_texture */ + +#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 (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); +#endif +#endif /* GL_ARB_color_buffer_float */ + +#ifndef GL_ARB_compatibility +#define GL_ARB_compatibility 1 +#endif /* GL_ARB_compatibility */ + +#ifndef GL_ARB_compressed_texture_pixel_storage +#define GL_ARB_compressed_texture_pixel_storage 1 +#endif /* GL_ARB_compressed_texture_pixel_storage */ + +#ifndef GL_ARB_compute_shader +#define GL_ARB_compute_shader 1 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#endif /* GL_ARB_compute_shader */ + +#ifndef GL_ARB_compute_variable_group_size +#define GL_ARB_compute_variable_group_size 1 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +typedef void (APIENTRYP 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); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY 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); +#endif +#endif /* GL_ARB_compute_variable_group_size */ + +#ifndef GL_ARB_conservative_depth +#define GL_ARB_conservative_depth 1 +#endif /* GL_ARB_conservative_depth */ + +#ifndef GL_ARB_copy_buffer +#define GL_ARB_copy_buffer 1 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#endif /* GL_ARB_copy_buffer */ + +#ifndef GL_ARB_copy_image +#define GL_ARB_copy_image 1 +#endif /* GL_ARB_copy_image */ + +#ifndef GL_ARB_debug_output +#define GL_ARB_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#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 (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#endif +#endif /* GL_ARB_debug_output */ + +#ifndef GL_ARB_depth_buffer_float +#define GL_ARB_depth_buffer_float 1 +#endif /* GL_ARB_depth_buffer_float */ + +#ifndef GL_ARB_depth_clamp +#define GL_ARB_depth_clamp 1 +#endif /* GL_ARB_depth_clamp */ + +#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 +#endif /* GL_ARB_depth_texture */ + +#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 (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ARB_draw_buffers */ + +#ifndef GL_ARB_draw_buffers_blend +#define GL_ARB_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif +#endif /* GL_ARB_draw_buffers_blend */ + +#ifndef GL_ARB_draw_elements_base_vertex +#define GL_ARB_draw_elements_base_vertex 1 +#endif /* GL_ARB_draw_elements_base_vertex */ + +#ifndef GL_ARB_draw_indirect +#define GL_ARB_draw_indirect 1 +#endif /* GL_ARB_draw_indirect */ + +#ifndef GL_ARB_draw_instanced +#define GL_ARB_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_ARB_draw_instanced */ + +#ifndef GL_ARB_enhanced_layouts +#define GL_ARB_enhanced_layouts 1 +#endif /* GL_ARB_enhanced_layouts */ + +#ifndef GL_ARB_explicit_attrib_location +#define GL_ARB_explicit_attrib_location 1 +#endif /* GL_ARB_explicit_attrib_location */ + +#ifndef GL_ARB_explicit_uniform_location +#define GL_ARB_explicit_uniform_location 1 +#endif /* GL_ARB_explicit_uniform_location */ + +#ifndef GL_ARB_fragment_coord_conventions +#define GL_ARB_fragment_coord_conventions 1 +#endif /* GL_ARB_fragment_coord_conventions */ + +#ifndef GL_ARB_fragment_layer_viewport +#define GL_ARB_fragment_layer_viewport 1 +#endif /* GL_ARB_fragment_layer_viewport */ + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#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_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#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_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#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 (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); +#endif +#endif /* GL_ARB_fragment_program */ + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif /* GL_ARB_fragment_program_shadow */ + +#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 +#endif /* GL_ARB_fragment_shader */ + +#ifndef GL_ARB_framebuffer_no_attachments +#define GL_ARB_framebuffer_no_attachments 1 +#endif /* GL_ARB_framebuffer_no_attachments */ + +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 +#endif /* GL_ARB_framebuffer_object */ + +#ifndef GL_ARB_framebuffer_sRGB +#define GL_ARB_framebuffer_sRGB 1 +#endif /* GL_ARB_framebuffer_sRGB */ + +#ifndef GL_KHR_context_flush_control +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#endif /* GL_KHR_context_flush_control */ + +#ifndef GL_ARB_geometry_shader4 +#define GL_ARB_geometry_shader4 1 +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#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 (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_ARB_geometry_shader4 */ + +#ifndef GL_ARB_get_program_binary +#define GL_ARB_get_program_binary 1 +#endif /* GL_ARB_get_program_binary */ + +#ifndef GL_ARB_gpu_shader5 +#define GL_ARB_gpu_shader5 1 +#endif /* GL_ARB_gpu_shader5 */ + +#ifndef GL_ARB_gpu_shader_fp64 +#define GL_ARB_gpu_shader_fp64 1 +#endif /* GL_ARB_gpu_shader_fp64 */ + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +typedef unsigned short GLhalfARB; +#define GL_HALF_FLOAT_ARB 0x140B +#endif /* GL_ARB_half_float_pixel */ + +#ifndef GL_ARB_half_float_vertex +#define GL_ARB_half_float_vertex 1 +#endif /* GL_ARB_half_float_vertex */ + +#ifndef GL_ARB_imaging +#define GL_ARB_imaging 1 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_EQUATION 0x8009 +#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_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogram (GLenum target); +GLAPI void APIENTRY glResetMinmax (GLenum target); +#endif +#endif /* GL_ARB_imaging */ + +#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 (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_ARB_indirect_parameters */ + +#ifndef GL_ARB_instanced_arrays +#define GL_ARB_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); +#endif +#endif /* GL_ARB_instanced_arrays */ + +#ifndef GL_ARB_internalformat_query +#define GL_ARB_internalformat_query 1 +#endif /* GL_ARB_internalformat_query */ + +#ifndef GL_ARB_internalformat_query2 +#define GL_ARB_internalformat_query2 1 +#define GL_SRGB_DECODE_ARB 0x8299 +#endif /* GL_ARB_internalformat_query2 */ + +#ifndef GL_ARB_invalidate_subdata +#define GL_ARB_invalidate_subdata 1 +#endif /* GL_ARB_invalidate_subdata */ + +#ifndef GL_ARB_map_buffer_alignment +#define GL_ARB_map_buffer_alignment 1 +#endif /* GL_ARB_map_buffer_alignment */ + +#ifndef GL_ARB_map_buffer_range +#define GL_ARB_map_buffer_range 1 +#endif /* GL_ARB_map_buffer_range */ + +#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 (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_ARB_matrix_palette */ + +#ifndef GL_ARB_multi_bind +#define GL_ARB_multi_bind 1 +#endif /* GL_ARB_multi_bind */ + +#ifndef GL_ARB_multi_draw_indirect +#define GL_ARB_multi_draw_indirect 1 +#endif /* GL_ARB_multi_draw_indirect */ + +#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 (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); +#endif +#endif /* GL_ARB_multisample */ + +#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 (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); +#endif +#endif /* GL_ARB_multitexture */ + +#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 (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); +GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQueryARB (GLenum target); +GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_ARB_occlusion_query */ + +#ifndef GL_ARB_occlusion_query2 +#define GL_ARB_occlusion_query2 1 +#endif /* GL_ARB_occlusion_query2 */ + +#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 +#endif /* GL_ARB_pixel_buffer_object */ + +#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 (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_ARB_point_parameters */ + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif /* GL_ARB_point_sprite */ + +#ifndef GL_ARB_program_interface_query +#define GL_ARB_program_interface_query 1 +#endif /* GL_ARB_program_interface_query */ + +#ifndef GL_ARB_provoking_vertex +#define GL_ARB_provoking_vertex 1 +#endif /* GL_ARB_provoking_vertex */ + +#ifndef GL_ARB_query_buffer_object +#define GL_ARB_query_buffer_object 1 +#endif /* GL_ARB_query_buffer_object */ + +#ifndef GL_ARB_robust_buffer_access_behavior +#define GL_ARB_robust_buffer_access_behavior 1 +#endif /* GL_ARB_robust_buffer_access_behavior */ + +#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 (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); +GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); +GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#endif +#endif /* GL_ARB_robustness */ + +#ifndef GL_ARB_robustness_isolation +#define GL_ARB_robustness_isolation 1 +#endif /* GL_ARB_robustness_isolation */ + +#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 (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); +#endif +#endif /* GL_ARB_sample_shading */ + +#ifndef GL_ARB_sampler_objects +#define GL_ARB_sampler_objects 1 +#endif /* GL_ARB_sampler_objects */ + +#ifndef GL_ARB_seamless_cube_map +#define GL_ARB_seamless_cube_map 1 +#endif /* GL_ARB_seamless_cube_map */ + +#ifndef GL_ARB_seamless_cubemap_per_texture +#define GL_ARB_seamless_cubemap_per_texture 1 +#endif /* GL_ARB_seamless_cubemap_per_texture */ + +#ifndef GL_ARB_separate_shader_objects +#define GL_ARB_separate_shader_objects 1 +#endif /* GL_ARB_separate_shader_objects */ + +#ifndef GL_ARB_shader_atomic_counters +#define GL_ARB_shader_atomic_counters 1 +#endif /* GL_ARB_shader_atomic_counters */ + +#ifndef GL_ARB_shader_bit_encoding +#define GL_ARB_shader_bit_encoding 1 +#endif /* GL_ARB_shader_bit_encoding */ + +#ifndef GL_ARB_shader_draw_parameters +#define GL_ARB_shader_draw_parameters 1 +#endif /* GL_ARB_shader_draw_parameters */ + +#ifndef GL_ARB_shader_group_vote +#define GL_ARB_shader_group_vote 1 +#endif /* GL_ARB_shader_group_vote */ + +#ifndef GL_ARB_shader_image_load_store +#define GL_ARB_shader_image_load_store 1 +#endif /* GL_ARB_shader_image_load_store */ + +#ifndef GL_ARB_shader_image_size +#define GL_ARB_shader_image_size 1 +#endif /* GL_ARB_shader_image_size */ + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef char GLcharARB; +#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 void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); +GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#endif +#endif /* GL_ARB_shader_objects */ + +#ifndef GL_ARB_shader_precision +#define GL_ARB_shader_precision 1 +#endif /* GL_ARB_shader_precision */ + +#ifndef GL_ARB_shader_stencil_export +#define GL_ARB_shader_stencil_export 1 +#endif /* GL_ARB_shader_stencil_export */ + +#ifndef GL_ARB_shader_storage_buffer_object +#define GL_ARB_shader_storage_buffer_object 1 +#endif /* GL_ARB_shader_storage_buffer_object */ + +#ifndef GL_ARB_shader_subroutine +#define GL_ARB_shader_subroutine 1 +#endif /* GL_ARB_shader_subroutine */ + +#ifndef GL_ARB_shader_texture_lod +#define GL_ARB_shader_texture_lod 1 +#endif /* GL_ARB_shader_texture_lod */ + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#endif /* GL_ARB_shading_language_100 */ + +#ifndef GL_ARB_shading_language_420pack +#define GL_ARB_shading_language_420pack 1 +#endif /* GL_ARB_shading_language_420pack */ + +#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 (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#endif +#endif /* GL_ARB_shading_language_include */ + +#ifndef GL_ARB_shading_language_packing +#define GL_ARB_shading_language_packing 1 +#endif /* GL_ARB_shading_language_packing */ + +#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 +#endif /* GL_ARB_shadow */ + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#endif /* GL_ARB_shadow_ambient */ + +#ifndef GL_ARB_sparse_texture +#define GL_ARB_sparse_texture 1 +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_MIN_SPARSE_LEVEL_ARB 0x919B +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#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_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#endif +#endif /* GL_ARB_sparse_texture */ + +#ifndef GL_ARB_stencil_texturing +#define GL_ARB_stencil_texturing 1 +#endif /* GL_ARB_stencil_texturing */ + +#ifndef GL_ARB_sync +#define GL_ARB_sync 1 +#endif /* GL_ARB_sync */ + +#ifndef GL_ARB_tessellation_shader +#define GL_ARB_tessellation_shader 1 +#endif /* GL_ARB_tessellation_shader */ + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#endif /* GL_ARB_texture_border_clamp */ + +#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 (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_ARB_texture_buffer_object */ + +#ifndef GL_ARB_texture_buffer_object_rgb32 +#define GL_ARB_texture_buffer_object_rgb32 1 +#endif /* GL_ARB_texture_buffer_object_rgb32 */ + +#ifndef GL_ARB_texture_buffer_range +#define GL_ARB_texture_buffer_range 1 +#endif /* GL_ARB_texture_buffer_range */ + +#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 (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); +#endif +#endif /* GL_ARB_texture_compression */ + +#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 +#endif /* GL_ARB_texture_compression_bptc */ + +#ifndef GL_ARB_texture_compression_rgtc +#define GL_ARB_texture_compression_rgtc 1 +#endif /* GL_ARB_texture_compression_rgtc */ + +#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 +#endif /* GL_ARB_texture_cube_map */ + +#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 +#endif /* GL_ARB_texture_cube_map_array */ + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 +#endif /* GL_ARB_texture_env_add */ + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#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 GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#endif /* GL_ARB_texture_env_combine */ + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 +#endif /* GL_ARB_texture_env_crossbar */ + +#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 +#endif /* GL_ARB_texture_env_dot3 */ + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#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 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 +#endif /* GL_ARB_texture_float */ + +#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 +#endif /* GL_ARB_texture_gather */ + +#ifndef GL_ARB_texture_mirror_clamp_to_edge +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif /* GL_ARB_texture_mirrored_repeat */ + +#ifndef GL_ARB_texture_multisample +#define GL_ARB_texture_multisample 1 +#endif /* GL_ARB_texture_multisample */ + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +#endif /* GL_ARB_texture_non_power_of_two */ + +#ifndef GL_ARB_texture_query_levels +#define GL_ARB_texture_query_levels 1 +#endif /* GL_ARB_texture_query_levels */ + +#ifndef GL_ARB_texture_query_lod +#define GL_ARB_texture_query_lod 1 +#endif /* GL_ARB_texture_query_lod */ + +#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 +#endif /* GL_ARB_texture_rectangle */ + +#ifndef GL_ARB_texture_rg +#define GL_ARB_texture_rg 1 +#endif /* GL_ARB_texture_rg */ + +#ifndef GL_ARB_texture_rgb10_a2ui +#define GL_ARB_texture_rgb10_a2ui 1 +#endif /* GL_ARB_texture_rgb10_a2ui */ + +#ifndef GL_ARB_texture_stencil8 +#define GL_ARB_texture_stencil8 1 +#endif /* GL_ARB_texture_stencil8 */ + +#ifndef GL_ARB_texture_storage +#define GL_ARB_texture_storage 1 +#endif /* GL_ARB_texture_storage */ + +#ifndef GL_ARB_texture_storage_multisample +#define GL_ARB_texture_storage_multisample 1 +#endif /* GL_ARB_texture_storage_multisample */ + +#ifndef GL_ARB_texture_swizzle +#define GL_ARB_texture_swizzle 1 +#endif /* GL_ARB_texture_swizzle */ + +#ifndef GL_ARB_texture_view +#define GL_ARB_texture_view 1 +#endif /* GL_ARB_texture_view */ + +#ifndef GL_ARB_timer_query +#define GL_ARB_timer_query 1 +#endif /* GL_ARB_timer_query */ + +#ifndef GL_ARB_transform_feedback2 +#define GL_ARB_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#endif /* GL_ARB_transform_feedback2 */ + +#ifndef GL_ARB_transform_feedback3 +#define GL_ARB_transform_feedback3 1 +#endif /* GL_ARB_transform_feedback3 */ + +#ifndef GL_ARB_transform_feedback_instanced +#define GL_ARB_transform_feedback_instanced 1 +#endif /* GL_ARB_transform_feedback_instanced */ + +#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 (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); +#endif +#endif /* GL_ARB_transpose_matrix */ + +#ifndef GL_ARB_uniform_buffer_object +#define GL_ARB_uniform_buffer_object 1 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#endif /* GL_ARB_uniform_buffer_object */ + +#ifndef GL_ARB_vertex_array_bgra +#define GL_ARB_vertex_array_bgra 1 +#endif /* GL_ARB_vertex_array_bgra */ + +#ifndef GL_ARB_vertex_array_object +#define GL_ARB_vertex_array_object 1 +#endif /* GL_ARB_vertex_array_object */ + +#ifndef GL_ARB_vertex_attrib_64bit +#define GL_ARB_vertex_attrib_64bit 1 +#endif /* GL_ARB_vertex_attrib_64bit */ + +#ifndef GL_ARB_vertex_attrib_binding +#define GL_ARB_vertex_attrib_binding 1 +#endif /* GL_ARB_vertex_attrib_binding */ + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 +#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_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#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 (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); +typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); +typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); +typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); +typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); +typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); +typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); +GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); +GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); +GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); +GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); +GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); +GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); +GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); +GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexBlendARB (GLint count); +#endif +#endif /* GL_ARB_vertex_blend */ + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +#ifdef __MACOSX__ /* The OS X headers haven't caught up with Khronos yet */ +typedef long GLsizeiptrARB; +typedef long GLintptrARB; +#else +typedef ptrdiff_t GLsizeiptrARB; +typedef ptrdiff_t GLintptrARB; +#endif +#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 void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); +GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_ARB_vertex_buffer_object */ + +#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_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#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 +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); +#endif +#endif /* GL_ARB_vertex_program */ + +#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 (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); +#endif +#endif /* GL_ARB_vertex_shader */ + +#ifndef GL_ARB_vertex_type_10f_11f_11f_rev +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + +#ifndef GL_ARB_vertex_type_2_10_10_10_rev +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ + +#ifndef GL_ARB_viewport_array +#define GL_ARB_viewport_array 1 +#endif /* GL_ARB_viewport_array */ + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); +#endif +#endif /* GL_ARB_window_pos */ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#endif /* GL_KHR_debug */ + +#ifndef GL_KHR_texture_compression_astc_hdr +#define GL_KHR_texture_compression_astc_hdr 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 +#endif /* GL_KHR_texture_compression_astc_hdr */ + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif /* GL_KHR_texture_compression_astc_ldr */ + +#ifndef GL_OES_byte_coordinates +#define GL_OES_byte_coordinates 1 +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); +typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x); +typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y); +typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z); +typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); +GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); +GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); +GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); +GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex2bOES (GLbyte x); +GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y); +GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z); +GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); +#endif +#endif /* GL_OES_byte_coordinates */ + +#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 +#endif /* GL_OES_compressed_paletted_texture */ + +#ifndef GL_OES_fixed_point +#define GL_OES_fixed_point 1 +typedef GLint GLfixed; +#define GL_FIXED_OES 0x140C +typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); +typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); +typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); +typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); +typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); +typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); +typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert); +typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); +typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); +typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); +typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); +typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); +typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); +typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); +typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); +typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); +typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); +typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); +typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); +typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); +typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); +typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); +GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); +GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); +GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); +GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); +GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glLineWidthxOES (GLfixed width); +GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); +GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glPointSizexOES (GLfixed size); +GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); +GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert); +GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); +GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); +GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); +GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); +GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); +GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); +GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); +GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); +GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); +GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glIndexxOES (GLfixed component); +GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); +GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); +GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); +GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); +GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glPassThroughxOES (GLfixed token); +GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); +GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); +GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); +GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); +GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); +GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); +GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glVertex2xOES (GLfixed x); +GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); +#endif +#endif /* GL_OES_fixed_point */ + +#ifndef GL_OES_query_matrix +#define GL_OES_query_matrix 1 +typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); +#endif +#endif /* GL_OES_query_matrix */ + +#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 +#endif /* GL_OES_read_format */ + +#ifndef GL_OES_single_precision +#define GL_OES_single_precision 1 +typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); +typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); +typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); +typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); +typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); +GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); +GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); +GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); +GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#endif +#endif /* GL_OES_single_precision */ + +#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 +#endif /* GL_3DFX_multisample */ + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 +typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); +#endif +#endif /* GL_3DFX_tbuffer */ + +#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 +#endif /* GL_3DFX_texture_compression_FXT1 */ + +#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 +#endif /* GL_AMD_blend_minmax_factor */ + +#ifndef GL_AMD_conservative_depth +#define GL_AMD_conservative_depth 1 +#endif /* GL_AMD_conservative_depth */ + +#ifndef GL_AMD_debug_output +#define GL_AMD_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +#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 (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#endif +#endif /* GL_AMD_debug_output */ + +#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 +#endif /* GL_AMD_depth_clamp_separate */ + +#ifndef GL_AMD_draw_buffers_blend +#define GL_AMD_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_AMD_draw_buffers_blend */ + +#ifndef GL_AMD_gcn_shader +#define GL_AMD_gcn_shader 1 +#endif /* GL_AMD_gcn_shader */ + +#ifndef GL_AMD_gpu_shader_int64 +#define GL_AMD_gpu_shader_int64 1 +typedef int64_t GLint64EXT; +#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 (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); +GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); +GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); +GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); +GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); +GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); +GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_AMD_gpu_shader_int64 */ + +#ifndef GL_AMD_interleaved_elements +#define GL_AMD_interleaved_elements 1 +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); +#endif +#endif /* GL_AMD_interleaved_elements */ + +#ifndef GL_AMD_multi_draw_indirect +#define GL_AMD_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#endif +#endif /* GL_AMD_multi_draw_indirect */ + +#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 (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); +typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); +typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); +GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); +GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); +#endif +#endif /* GL_AMD_name_gen_delete */ + +#ifndef GL_AMD_occlusion_query_event +#define GL_AMD_occlusion_query_event 1 +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); +#endif +#endif /* GL_AMD_occlusion_query_event */ + +#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 (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); +typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); +GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +#endif /* GL_AMD_performance_monitor */ + +#ifndef GL_AMD_pinned_memory +#define GL_AMD_pinned_memory 1 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#endif /* GL_AMD_pinned_memory */ + +#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 +#endif /* GL_AMD_query_buffer_object */ + +#ifndef GL_AMD_sample_positions +#define GL_AMD_sample_positions 1 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); +#endif +#endif /* GL_AMD_sample_positions */ + +#ifndef GL_AMD_seamless_cubemap_per_texture +#define GL_AMD_seamless_cubemap_per_texture 1 +#endif /* GL_AMD_seamless_cubemap_per_texture */ + +#ifndef GL_AMD_shader_atomic_counter_ops +#define GL_AMD_shader_atomic_counter_ops 1 +#endif /* GL_AMD_shader_atomic_counter_ops */ + +#ifndef GL_AMD_shader_stencil_export +#define GL_AMD_shader_stencil_export 1 +#endif /* GL_AMD_shader_stencil_export */ + +#ifndef GL_AMD_shader_trinary_minmax +#define GL_AMD_shader_trinary_minmax 1 +#endif /* GL_AMD_shader_trinary_minmax */ + +#ifndef GL_AMD_sparse_texture +#define GL_AMD_sparse_texture 1 +#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 +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#endif +#endif /* GL_AMD_sparse_texture */ + +#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 (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); +#endif +#endif /* GL_AMD_stencil_operation_extended */ + +#ifndef GL_AMD_texture_texture4 +#define GL_AMD_texture_texture4 1 +#endif /* GL_AMD_texture_texture4 */ + +#ifndef GL_AMD_transform_feedback3_lines_triangles +#define GL_AMD_transform_feedback3_lines_triangles 1 +#endif /* GL_AMD_transform_feedback3_lines_triangles */ + +#ifndef GL_AMD_transform_feedback4 +#define GL_AMD_transform_feedback4 1 +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#endif /* GL_AMD_transform_feedback4 */ + +#ifndef GL_AMD_vertex_shader_layer +#define GL_AMD_vertex_shader_layer 1 +#endif /* GL_AMD_vertex_shader_layer */ + +#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 (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); +GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); +#endif +#endif /* GL_AMD_vertex_shader_tessellator */ + +#ifndef GL_AMD_vertex_shader_viewport_index +#define GL_AMD_vertex_shader_viewport_index 1 +#endif /* GL_AMD_vertex_shader_viewport_index */ + +#ifndef GL_APPLE_aux_depth_stencil +#define GL_APPLE_aux_depth_stencil 1 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#endif /* GL_APPLE_aux_depth_stencil */ + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#endif /* GL_APPLE_client_storage */ + +#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 (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#endif +#endif /* GL_APPLE_element_array */ + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); +typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); +typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); +#endif +#endif /* GL_APPLE_fence */ + +#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 +#endif /* GL_APPLE_float_pixels */ + +#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 (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); +#endif +#endif /* GL_APPLE_flush_buffer_range */ + +#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 GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#endif +#endif /* GL_APPLE_object_purgeable */ + +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_RGB_RAW_422_APPLE 0x8A51 +#endif /* GL_APPLE_rgb_422 */ + +#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 +#endif /* GL_APPLE_row_bytes */ + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#endif /* GL_APPLE_specular_vector */ + +#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 (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_APPLE_texture_range */ + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#endif /* GL_APPLE_transform_hint */ + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); +#endif +#endif /* GL_APPLE_vertex_array_object */ + +#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_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); +#endif +#endif /* GL_APPLE_vertex_array_range */ + +#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 (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#endif +#endif /* GL_APPLE_vertex_program_evaluators */ + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 +#define GL_YCBCR_422_APPLE 0x85B9 +#endif /* GL_APPLE_ycbcr_422 */ + +#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 (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ATI_draw_buffers */ + +#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 (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); +#endif +#endif /* GL_ATI_element_array */ + +#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 (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); +#endif +#endif /* GL_ATI_envmap_bumpmap */ + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +#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_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#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_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glBeginFragmentShaderATI (void); +GLAPI void APIENTRY glEndFragmentShaderATI (void); +GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); +GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); +#endif +#endif /* GL_ATI_fragment_shader */ + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 +typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); +#endif +#endif /* GL_ATI_map_object_buffer */ + +#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 +#endif /* GL_ATI_meminfo */ + +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif /* GL_ATI_pixel_format_float */ + +#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 (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_pn_triangles */ + +#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 (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#endif +#endif /* GL_ATI_separate_stencil */ + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#endif /* GL_ATI_text_fragment_shader */ + +#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 +#endif /* GL_ATI_texture_env_combine3 */ + +#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 +#endif /* GL_ATI_texture_float */ + +#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 +#endif /* GL_ATI_texture_mirror_once */ + +#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 GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_array_object */ + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_attrib_array_object */ + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 +#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 +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); +GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); +GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_vertex_streams */ + +#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 +#endif /* GL_EXT_422_pixels */ + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 +#define GL_ABGR_EXT 0x8000 +#endif /* GL_EXT_abgr */ + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 +#endif /* GL_EXT_bgra */ + +#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 void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); +typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); +typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); +GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); +GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); +#endif +#endif /* GL_EXT_bindable_uniform */ + +#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 (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#endif +#endif /* GL_EXT_blend_color */ + +#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 (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_EXT_blend_equation_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 (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_EXT_blend_func_separate */ + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 +#endif /* GL_EXT_blend_logic_op */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_BLEND_EQUATION_EXT 0x8009 +typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); +#endif +#endif /* GL_EXT_blend_minmax */ + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#endif /* GL_EXT_blend_subtract */ + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#endif /* GL_EXT_clip_volume_hint */ + +#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 +#endif /* GL_EXT_cmyka */ + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 +typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#endif +#endif /* GL_EXT_color_subtable */ + +#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 (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); +GLAPI void APIENTRY glUnlockArraysEXT (void); +#endif +#endif /* GL_EXT_compiled_vertex_array */ + +#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 (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#endif +#endif /* GL_EXT_convolution */ + +#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 (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); +typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); +typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); +typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); +typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); +typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); +typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); +typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); +GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); +GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); +GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_coordinate_frame */ + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_copy_texture */ + +#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 (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_cull_vertex */ + +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_EXT_debug_label */ + +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPopGroupMarkerEXT (void); +#endif +#endif /* GL_EXT_debug_marker */ + +#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 (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); +#endif +#endif /* GL_EXT_depth_bounds_test */ + +#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 (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP 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 (APIENTRYP 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 (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP 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 (APIENTRYP 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 (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); +typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); +typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); +typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); +GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); +GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); +GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); +GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); +GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); +GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); +GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); +GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); +GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); +GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); +GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); +GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); +GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); +GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); +GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); +GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); +GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); +#endif +#endif /* GL_EXT_direct_state_access */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 +typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#endif +#endif /* GL_EXT_draw_buffers2 */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_EXT_draw_instanced */ + +#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 (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#endif +#endif /* GL_EXT_draw_range_elements */ + +#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 (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_fog_coord */ + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* GL_EXT_framebuffer_blit */ + +#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 (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_framebuffer_multisample */ + +#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 +#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ + +#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 GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); +#endif +#endif /* GL_EXT_framebuffer_object */ + +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#endif /* GL_EXT_framebuffer_sRGB */ + +#ifndef GL_EXT_geometry_shader4 +#define GL_EXT_geometry_shader4 1 +#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_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#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 +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +#endif +#endif /* GL_EXT_geometry_shader4 */ + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#endif +#endif /* GL_EXT_gpu_program_parameters */ + +#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 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); +#endif +#endif /* GL_EXT_gpu_shader4 */ + +#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 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogramEXT (GLenum target); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); +#endif +#endif /* GL_EXT_histogram */ + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 +#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 +#endif /* GL_EXT_index_array_formats */ + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); +#endif +#endif /* GL_EXT_index_func */ + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_index_material */ + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 +#endif /* GL_EXT_index_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 (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); +GLAPI void APIENTRY glTextureLightEXT (GLenum pname); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_light_texture */ + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 +#endif /* GL_EXT_misc_attribute */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#endif +#endif /* GL_EXT_multi_draw_arrays */ + +#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 (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); +#endif +#endif /* GL_EXT_multisample */ + +#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 +#endif /* GL_EXT_packed_depth_stencil */ + +#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 +#endif /* GL_EXT_packed_float */ + +#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 +#endif /* GL_EXT_packed_pixels */ + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 +#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 +typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_paletted_texture */ + +#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 +#endif /* GL_EXT_pixel_buffer_object */ + +#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 (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_pixel_transform */ + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 +#endif /* GL_EXT_pixel_transform_color_table */ + +#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 (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_EXT_point_parameters */ + +#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 (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); +#endif +#endif /* GL_EXT_polygon_offset */ + +#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 (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); +#endif +#endif /* GL_EXT_provoking_vertex */ + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 +#define GL_RESCALE_NORMAL_EXT 0x803A +#endif /* GL_EXT_rescale_normal */ + +#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 (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_secondary_color */ + +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); +typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); +GLAPI void APIENTRY glActiveProgramEXT (GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); +#endif +#endif /* GL_EXT_separate_shader_objects */ + +#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 +#endif /* GL_EXT_separate_specular_color */ + +#ifndef GL_EXT_shader_image_load_formatted +#define GL_EXT_shader_image_load_formatted 1 +#endif /* GL_EXT_shader_image_load_formatted */ + +#ifndef GL_EXT_shader_image_load_store +#define GL_EXT_shader_image_load_store 1 +#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_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_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); +#endif +#endif /* GL_EXT_shader_image_load_store */ + +#ifndef GL_EXT_shader_integer_mix +#define GL_EXT_shader_integer_mix 1 +#endif /* GL_EXT_shader_integer_mix */ + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif /* GL_EXT_shadow_funcs */ + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#endif /* GL_EXT_shared_texture_palette */ + +#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 +typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); +#endif +#endif /* GL_EXT_stencil_clear_tag */ + +#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 (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); +#endif +#endif /* GL_EXT_stencil_two_side */ + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 +#endif /* GL_EXT_stencil_wrap */ + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_subtexture */ + +#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 GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#endif /* GL_EXT_texture */ + +#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 (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_texture3D */ + +#ifndef GL_EXT_texture_array +#define GL_EXT_texture_array 1 +#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 +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#endif /* GL_EXT_texture_array */ + +#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 (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_EXT_texture_buffer_object */ + +#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 +#endif /* GL_EXT_texture_compression_latc */ + +#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 +#endif /* GL_EXT_texture_compression_rgtc */ + +#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 +#endif /* GL_EXT_texture_compression_s3tc */ + +#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 +#endif /* GL_EXT_texture_cube_map */ + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 +#endif /* GL_EXT_texture_env_add */ + +#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 +#endif /* GL_EXT_texture_env_combine */ + +#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 +#endif /* GL_EXT_texture_env_dot3 */ + +#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 +#endif /* GL_EXT_texture_filter_anisotropic */ + +#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 (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); +typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#endif +#endif /* GL_EXT_texture_integer */ + +#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 +#endif /* GL_EXT_texture_lod_bias */ + +#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 +#endif /* GL_EXT_texture_mirror_clamp */ + +#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 (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#endif +#endif /* GL_EXT_texture_object */ + +#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 (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); +#endif +#endif /* GL_EXT_texture_perturb_normal */ + +#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 +#endif /* GL_EXT_texture_sRGB */ + +#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 +#endif /* GL_EXT_texture_sRGB_decode */ + +#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 +#endif /* GL_EXT_texture_shared_exponent */ + +#ifndef GL_EXT_texture_snorm +#define GL_EXT_texture_snorm 1 +#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_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#endif /* GL_EXT_texture_snorm */ + +#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 +#endif /* GL_EXT_texture_swizzle */ + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 +#define GL_TIME_ELAPSED_EXT 0x88BF +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +#endif /* GL_EXT_timer_query */ + +#ifndef GL_EXT_transform_feedback +#define GL_EXT_transform_feedback 1 +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#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_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackEXT (void); +GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#endif +#endif /* GL_EXT_transform_feedback */ + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 +#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 (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glArrayElementEXT (GLint i); +GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); +GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); +GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#endif +#endif /* GL_EXT_vertex_array */ + +#ifndef GL_EXT_vertex_array_bgra +#define GL_EXT_vertex_array_bgra 1 +#endif /* GL_EXT_vertex_array_bgra */ + +#ifndef GL_EXT_vertex_attrib_64bit +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#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 +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); +#endif +#endif /* GL_EXT_vertex_attrib_64bit */ + +#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_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 +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVertexShaderEXT (void); +GLAPI void APIENTRY glEndVertexShaderEXT (void); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); +GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); +GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); +GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); +GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); +GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); +GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); +GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); +GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); +GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); +GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +#endif +#endif /* GL_EXT_vertex_shader */ + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW0_EXT 0x1700 +#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 (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_vertex_weighting */ + +#ifndef GL_EXT_x11_sync_object +#define GL_EXT_x11_sync_object 1 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#endif +#endif /* GL_EXT_x11_sync_object */ + +#ifndef GL_GREMEDY_frame_terminator +#define GL_GREMEDY_frame_terminator 1 +typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); +#endif +#endif /* GL_GREMEDY_frame_terminator */ + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); +#endif +#endif /* GL_GREMEDY_string_marker */ + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#endif /* GL_HP_convolution_border_modes */ + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 +#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 +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_HP_image_transform */ + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#endif /* GL_HP_occlusion_test */ + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#endif /* GL_HP_texture_lighting */ + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 +#define GL_CULL_VERTEX_IBM 103050 +#endif /* GL_IBM_cull_vertex */ + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#endif +#endif /* GL_IBM_multimode_draw_arrays */ + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#endif /* GL_IBM_rasterpos_clip */ + +#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 +typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); +#endif +#endif /* GL_IBM_static_data */ + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif /* GL_IBM_texture_mirrored_repeat */ + +#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 (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#endif +#endif /* GL_IBM_vertex_array_lists */ + +#ifndef GL_INGR_blend_func_separate +#define GL_INGR_blend_func_separate 1 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_INGR_blend_func_separate */ + +#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 +#endif /* GL_INGR_color_clamp */ + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 +#define GL_INTERLACE_READ_INGR 0x8568 +#endif /* GL_INGR_interlace_read */ + +#ifndef GL_INTEL_fragment_shader_ordering +#define GL_INTEL_fragment_shader_ordering 1 +#endif /* GL_INTEL_fragment_shader_ordering */ + +#ifndef GL_INTEL_map_texture +#define GL_INTEL_map_texture 1 +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); +typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); +GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); +GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#endif +#endif /* GL_INTEL_map_texture */ + +#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 (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); +GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); +#endif +#endif /* GL_INTEL_parallel_arrays */ + +#ifndef GL_INTEL_performance_query +#define GL_INTEL_performance_query 1 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#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 +typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); +typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); +typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); +typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); +GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); +GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); +GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); +GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#endif +#endif /* GL_INTEL_performance_query */ + +#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 +#endif /* GL_MESAX_texture_stack */ + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 +#define GL_PACK_INVERT_MESA 0x8758 +#endif /* GL_MESA_pack_invert */ + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 +typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glResizeBuffersMESA (void); +#endif +#endif /* GL_MESA_resize_buffers */ + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); +#endif +#endif /* GL_MESA_window_pos */ + +#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 +#endif /* GL_MESA_ycbcr_texture */ + +#ifndef GL_NVX_conditional_render +#define GL_NVX_conditional_render 1 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); +GLAPI void APIENTRY glEndConditionalRenderNVX (void); +#endif +#endif /* GL_NVX_conditional_render */ + +#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 +#endif /* GL_NVX_gpu_memory_info */ + +#ifndef GL_NV_bindless_multi_draw_indirect +#define GL_NV_bindless_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#endif +#endif /* GL_NV_bindless_multi_draw_indirect */ + +#ifndef GL_NV_bindless_texture +#define GL_NV_bindless_texture 1 +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); +#endif +#endif /* GL_NV_bindless_texture */ + +#ifndef GL_NV_blend_equation_advanced +#define GL_NV_blend_equation_advanced 1 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLUE_NV 0x1905 +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_NV 0x9299 +#define GL_CONJOINT_NV 0x9284 +#define GL_CONTRAST_NV 0x92A1 +#define GL_DARKEN_NV 0x9297 +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISJOINT_NV 0x9283 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_GREEN_NV 0x1904 +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MULTIPLY_NV 0x9294 +#define GL_OVERLAY_NV 0x9296 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_RED_NV 0x1903 +#define GL_SCREEN_NV 0x9295 +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_XOR_NV 0x1506 +typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); +GLAPI void APIENTRY glBlendBarrierNV (void); +#endif +#endif /* GL_NV_blend_equation_advanced */ + +#ifndef GL_NV_blend_equation_advanced_coherent +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#endif /* GL_NV_blend_equation_advanced_coherent */ + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 +#endif /* GL_NV_blend_square */ + +#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 +#endif /* GL_NV_compute_program5 */ + +#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 (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRenderNV (void); +#endif +#endif /* GL_NV_conditional_render */ + +#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 +#endif /* GL_NV_copy_depth_to_color */ + +#ifndef GL_NV_copy_image +#define GL_NV_copy_image 1 +typedef void (APIENTRYP 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); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY 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); +#endif +#endif /* GL_NV_copy_image */ + +#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 +#endif /* GL_NV_deep_texture3D */ + +#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 (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); +typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); +GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); +#endif +#endif /* GL_NV_depth_buffer_float */ + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 +#define GL_DEPTH_CLAMP_NV 0x864F +#endif /* GL_NV_depth_clamp */ + +#ifndef GL_NV_draw_texture +#define GL_NV_draw_texture 1 +typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#endif +#endif /* GL_NV_draw_texture */ + +#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 (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); +#endif +#endif /* GL_NV_evaluators */ + +#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 (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); +GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); +#endif +#endif /* GL_NV_explicit_multisample */ + +#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 (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); +GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GLAPI void APIENTRY glFinishFenceNV (GLuint fence); +GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +#endif /* GL_NV_fence */ + +#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 +#endif /* GL_NV_float_buffer */ + +#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 +#endif /* GL_NV_fog_distance */ + +#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 (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#endif +#endif /* GL_NV_fragment_program */ + +#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 +#endif /* GL_NV_fragment_program2 */ + +#ifndef GL_NV_fragment_program4 +#define GL_NV_fragment_program4 1 +#endif /* GL_NV_fragment_program4 */ + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif /* GL_NV_fragment_program_option */ + +#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 (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_NV_framebuffer_multisample_coverage */ + +#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 (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); +GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_NV_geometry_program4 */ + +#ifndef GL_NV_geometry_shader4 +#define GL_NV_geometry_shader4 1 +#endif /* GL_NV_geometry_shader4 */ + +#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 (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); +#endif +#endif /* GL_NV_gpu_program4 */ + +#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 GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); +#endif +#endif /* GL_NV_gpu_program5 */ + +#ifndef GL_NV_gpu_program5_mem_extended +#define GL_NV_gpu_program5_mem_extended 1 +#endif /* GL_NV_gpu_program5_mem_extended */ + +#ifndef GL_NV_gpu_shader5 +#define GL_NV_gpu_shader5 1 +#endif /* GL_NV_gpu_shader5 */ + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 +typedef unsigned short GLhalfNV; +#define GL_HALF_FLOAT_NV 0x140B +typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); +typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); +typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +#endif +#endif /* GL_NV_half_float */ + +#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 +#endif /* GL_NV_light_max_exponent */ + +#ifndef GL_NV_multisample_coverage +#define GL_NV_multisample_coverage 1 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#endif /* GL_NV_multisample_coverage */ + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#endif /* GL_NV_multisample_filter_hint */ + +#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 (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glEndOcclusionQueryNV (void); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_occlusion_query */ + +#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 +#endif /* GL_NV_packed_depth_stencil */ + +#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 (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#endif +#endif /* GL_NV_parameter_buffer_object */ + +#ifndef GL_NV_parameter_buffer_object2 +#define GL_NV_parameter_buffer_object2 1 +#endif /* GL_NV_parameter_buffer_object2 */ + +#ifndef GL_NV_path_rendering +#define GL_NV_path_rendering 1 +#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_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_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_MOVE_TO_NV 0x02 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_LINE_TO_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_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_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_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_BOLD_BIT_NV 0x01 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#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_GLYPH_HAS_KERNING_BIT_NV 0x100 +#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 +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); +typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); +typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); +typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); +typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); +typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); +typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); +typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); +typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); +typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); +typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); +GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); +GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); +GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); +GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); +GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); +GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); +GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); +GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); +GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); +GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); +GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); +GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); +GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); +GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); +GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); +GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); +GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); +GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); +GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); +GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); +GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#endif +#endif /* GL_NV_path_rendering */ + +#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 (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); +#endif +#endif /* GL_NV_pixel_data_range */ + +#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 (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); +#endif +#endif /* GL_NV_point_sprite */ + +#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 (APIENTRYP 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 (APIENTRYP 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 (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_NV_present_video */ + +#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 (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveRestartNV (void); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); +#endif +#endif /* GL_NV_primitive_restart */ + +#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_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 (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_register_combiners */ + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); +#endif +#endif /* GL_NV_register_combiners2 */ + +#ifndef GL_NV_shader_atomic_counters +#define GL_NV_shader_atomic_counters 1 +#endif /* GL_NV_shader_atomic_counters */ + +#ifndef GL_NV_shader_atomic_float +#define GL_NV_shader_atomic_float 1 +#endif /* GL_NV_shader_atomic_float */ + +#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 (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); +typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); +typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); +typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); +typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); +GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); +GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); +GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); +GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); +GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); +GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); +GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); +GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); +GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_NV_shader_buffer_load */ + +#ifndef GL_NV_shader_buffer_store +#define GL_NV_shader_buffer_store 1 +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#endif /* GL_NV_shader_buffer_store */ + +#ifndef GL_NV_shader_storage_buffer_object +#define GL_NV_shader_storage_buffer_object 1 +#endif /* GL_NV_shader_storage_buffer_object */ + +#ifndef GL_NV_shader_thread_group +#define GL_NV_shader_thread_group 1 +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_SM_COUNT_NV 0x933B +#endif /* GL_NV_shader_thread_group */ + +#ifndef GL_NV_shader_thread_shuffle +#define GL_NV_shader_thread_shuffle 1 +#endif /* GL_NV_shader_thread_shuffle */ + +#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 +#endif /* GL_NV_tessellation_program5 */ + +#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 +#endif /* GL_NV_texgen_emboss */ + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 +#endif /* GL_NV_texgen_reflection */ + +#ifndef GL_NV_texture_barrier +#define GL_NV_texture_barrier 1 +typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureBarrierNV (void); +#endif +#endif /* GL_NV_texture_barrier */ + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 +#endif /* GL_NV_texture_compression_vtc */ + +#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 +#endif /* GL_NV_texture_env_combine4 */ + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#endif /* GL_NV_texture_expand_normal */ + +#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 (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#endif +#endif /* GL_NV_texture_multisample */ + +#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 +#endif /* GL_NV_texture_rectangle */ + +#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_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#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 +#endif /* GL_NV_texture_shader */ + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#endif /* GL_NV_texture_shader2 */ + +#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 +#endif /* GL_NV_texture_shader3 */ + +#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 +#define GL_LAYER_NV 0x8DAA +#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 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackNV (void); +GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); +GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); +GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); +GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#endif +#endif /* GL_NV_transform_feedback */ + +#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 (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedbackNV (void); +GLAPI void APIENTRY glResumeTransformFeedbackNV (void); +GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); +#endif +#endif /* GL_NV_transform_feedback2 */ + +#ifndef GL_NV_vdpau_interop +#define GL_NV_vdpau_interop 1 +typedef GLintptr GLvdpauSurfaceNV; +#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 void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); +typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); +typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); +GLAPI void APIENTRY glVDPAUFiniNV (void); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); +GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#endif +#endif /* GL_NV_vdpau_interop */ + +#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 (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); +#endif +#endif /* GL_NV_vertex_array_range */ + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#endif /* GL_NV_vertex_array_range2 */ + +#ifndef GL_NV_vertex_attrib_integer_64bit +#define GL_NV_vertex_attrib_integer_64bit 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); +GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +#endif +#endif /* GL_NV_vertex_attrib_integer_64bit */ + +#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 (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); +GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); +#endif +#endif /* GL_NV_vertex_buffer_unified_memory */ + +#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 (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); +typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); +typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); +GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); +GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); +GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); +#endif +#endif /* GL_NV_vertex_program */ + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 +#endif /* GL_NV_vertex_program1_1 */ + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 +#endif /* GL_NV_vertex_program2 */ + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif /* GL_NV_vertex_program2_option */ + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 +#endif /* GL_NV_vertex_program3 */ + +#ifndef GL_NV_vertex_program4 +#define GL_NV_vertex_program4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_vertex_program4 */ + +#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 (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#endif +#endif /* GL_NV_video_capture */ + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#endif /* GL_OML_interlace */ + +#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 +#endif /* GL_OML_resample */ + +#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 +#endif /* GL_OML_subsample */ + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 +#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 +typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); +#endif +#endif /* GL_PGI_misc_hints */ + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 +#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_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_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 GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#endif /* GL_PGI_vertex_hints */ + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#endif /* GL_REND_screen_coordinates */ + +#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 +#endif /* GL_S3_s3tc */ + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 +#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 +typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_detail_texture */ + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); +#endif +#endif /* GL_SGIS_fog_function */ + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#endif /* GL_SGIS_generate_mipmap */ + +#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 (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); +#endif +#endif /* GL_SGIS_multisample */ + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 +#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 +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); +#endif +#endif /* GL_SGIS_pixel_texture */ + +#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 +#endif /* GL_SGIS_point_line_texgen */ + +#ifndef GL_SGIS_point_parameters +#define GL_SGIS_point_parameters 1 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_SGIS_point_parameters */ + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 +#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 +typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_sharpen_texture */ + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 +#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_TEXTURE_4D_BINDING_SGIS 0x814F +typedef void (APIENTRYP 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 (APIENTRYP 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); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY 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); +#endif +#endif /* GL_SGIS_texture4D */ + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#endif /* GL_SGIS_texture_border_clamp */ + +#ifndef GL_SGIS_texture_color_mask +#define GL_SGIS_texture_color_mask 1 +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#endif +#endif /* GL_SGIS_texture_color_mask */ + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#endif /* GL_SGIS_texture_edge_clamp */ + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); +typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#endif +#endif /* GL_SGIS_texture_filter4 */ + +#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 +#endif /* GL_SGIS_texture_lod */ + +#ifndef GL_SGIS_texture_select +#define GL_SGIS_texture_select 1 +#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 +#endif /* GL_SGIS_texture_select */ + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 +#define GL_ASYNC_MARKER_SGIX 0x8329 +typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); +typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); +typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); +#endif +#endif /* GL_SGIX_async */ + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#endif /* GL_SGIX_async_histogram */ + +#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 +#endif /* GL_SGIX_async_pixel */ + +#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 +#endif /* GL_SGIX_blend_alpha_minmax */ + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_SGIX_calligraphic_fragment 1 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#endif /* GL_SGIX_calligraphic_fragment */ + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 +#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_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#endif /* GL_SGIX_clipmap */ + +#ifndef GL_SGIX_convolution_accuracy +#define GL_SGIX_convolution_accuracy 1 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#endif /* GL_SGIX_convolution_accuracy */ + +#ifndef GL_SGIX_depth_pass_instrument +#define GL_SGIX_depth_pass_instrument 1 +#endif /* GL_SGIX_depth_pass_instrument */ + +#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 +#endif /* GL_SGIX_depth_texture */ + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 +typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushRasterSGIX (void); +#endif +#endif /* GL_SGIX_flush_raster */ + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#endif /* GL_SGIX_fog_offset */ + +#ifndef GL_SGIX_fragment_lighting +#define GL_SGIX_fragment_lighting 1 +#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 +typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); +GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); +#endif +#endif /* GL_SGIX_fragment_lighting */ + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); +#endif +#endif /* GL_SGIX_framezoom */ + +#ifndef GL_SGIX_igloo_interface +#define GL_SGIX_igloo_interface 1 +typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); +#endif +#endif /* GL_SGIX_igloo_interface */ + +#ifndef GL_SGIX_instruments +#define GL_SGIX_instruments 1 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); +typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); +typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); +typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); +GLAPI void APIENTRY glStartInstrumentsSGIX (void); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); +#endif +#endif /* GL_SGIX_instruments */ + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 +#define GL_INTERLACE_SGIX 0x8094 +#endif /* GL_SGIX_interlace */ + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#endif /* GL_SGIX_ir_instrument1 */ + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 +#define GL_LIST_PRIORITY_SGIX 0x8182 +typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); +GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); +GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_list_priority */ + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); +#endif +#endif /* GL_SGIX_pixel_texture */ + +#ifndef GL_SGIX_pixel_tiles +#define GL_SGIX_pixel_tiles 1 +#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 +#endif /* GL_SGIX_pixel_tiles */ + +#ifndef GL_SGIX_polynomial_ffd +#define GL_SGIX_polynomial_ffd 1 +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#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 +typedef void (APIENTRYP 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 (APIENTRYP 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 (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY 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); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); +#endif +#endif /* GL_SGIX_polynomial_ffd */ + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); +#endif +#endif /* GL_SGIX_reference_plane */ + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 +#define GL_PACK_RESAMPLE_SGIX 0x842C +#define GL_UNPACK_RESAMPLE_SGIX 0x842D +#define GL_RESAMPLE_REPLICATE_SGIX 0x842E +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#endif /* GL_SGIX_resample */ + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#endif /* GL_SGIX_scalebias_hint */ + +#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 +#endif /* GL_SGIX_shadow */ + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#endif /* GL_SGIX_shadow_ambient */ + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 +#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 +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_sprite */ + +#ifndef GL_SGIX_subsample +#define GL_SGIX_subsample 1 +#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 +#endif /* GL_SGIX_subsample */ + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 +typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTagSampleBufferSGIX (void); +#endif +#endif /* GL_SGIX_tag_sample_buffer */ + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#endif /* GL_SGIX_texture_add_env */ + +#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 +#endif /* GL_SGIX_texture_coordinate_clamp */ + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#endif /* GL_SGIX_texture_lod_bias */ + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#endif /* GL_SGIX_texture_multi_buffer */ + +#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 +#endif /* GL_SGIX_texture_scale_bias */ + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#endif /* GL_SGIX_vertex_preclip */ + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#endif /* GL_SGIX_ycrcb */ + +#ifndef GL_SGIX_ycrcb_subsample +#define GL_SGIX_ycrcb_subsample 1 +#endif /* GL_SGIX_ycrcb_subsample */ + +#ifndef GL_SGIX_ycrcba +#define GL_SGIX_ycrcba 1 +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#endif /* GL_SGIX_ycrcba */ + +#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 +#endif /* GL_SGI_color_matrix */ + +#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 (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_SGI_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 +#endif /* GL_SGI_texture_color_table */ + +#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 (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFinishTextureSUNX (void); +#endif +#endif /* GL_SUNX_constant_data */ + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 +#define GL_WRAP_BORDER_SUN 0x81D4 +#endif /* GL_SUN_convolution_border_modes */ + +#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 (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); +#endif +#endif /* GL_SUN_global_alpha */ + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); +#endif +#endif /* GL_SUN_mesh_array */ + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 +#define GL_SLICE_ACCUM_SUN 0x85CC +#endif /* GL_SUN_slice_accum */ + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 +#define GL_RESTART_SUN 0x0001 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#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 (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); +#endif +#endif /* GL_SUN_triangle_list */ + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP 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 (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY 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); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#endif +#endif /* GL_SUN_vertex */ + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#endif /* GL_WIN_phong_shading */ + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#endif /* GL_WIN_specular_fog */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/code/SDL2/include/SDL_opengles.h b/code/SDL2/include/SDL_opengles.h index d88e1573..bcc12777 100644 --- a/code/SDL2/include/SDL_opengles.h +++ b/code/SDL2/include/SDL_opengles.h @@ -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/code/SDL2/include/SDL_opengles2.h b/code/SDL2/include/SDL_opengles2.h index 2c054792..edcd1a24 100644 --- a/code/SDL2/include/SDL_opengles2.h +++ b/code/SDL2/include/SDL_opengles2.h @@ -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 @@ -20,15 +20,17 @@ */ /** - * \file SDL_opengles.h + * \file SDL_opengles2.h * * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. */ #ifndef _MSC_VER + #ifdef __IPHONEOS__ #include #include #else +#include #include #include #endif @@ -36,2752 +38,10 @@ #else /* _MSC_VER */ /* OpenGL ES2 headers for Visual Studio */ - -#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_ */ - - -#ifndef __gl2platform_h_ -#define __gl2platform_h_ - -/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h - * - * Adopters may modify khrplatform.h and this file to suit their platform. - * You are encouraged to submit all 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 "OpenGL-ES" component "Registry". - */ - -/*#include */ - -#ifndef GL_APICALL -#define GL_APICALL KHRONOS_APICALL -#endif - -#ifndef GL_APIENTRY -#define GL_APIENTRY KHRONOS_APIENTRY -#endif - -#endif /* __gl2platform_h_ */ - -#ifndef __gl2_h_ -#define __gl2_h_ - -/* $Revision: 16803 $ on $Date:: 2012-02-02 09:49:18 -0800 #$ */ - -/*#include */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/*------------------------------------------------------------------------- - * Data type definitions - *-----------------------------------------------------------------------*/ - -typedef void GLvoid; -typedef char GLchar; -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef khronos_int8_t GLbyte; -typedef short GLshort; -typedef int GLint; -typedef int GLsizei; -typedef khronos_uint8_t GLubyte; -typedef unsigned short GLushort; -typedef unsigned int GLuint; -typedef khronos_float_t GLfloat; -typedef khronos_float_t GLclampf; -typedef khronos_int32_t GLfixed; - -/* GL types for handling large vertex buffer objects */ -typedef khronos_intptr_t GLintptr; -typedef khronos_ssize_t GLsizeiptr; - -/* OpenGL ES core versions */ -#define GL_ES_VERSION_2_0 1 - -/* ClearBufferMask */ -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 - -/* Boolean */ -#define GL_FALSE 0 -#define GL_TRUE 1 - -/* BeginMode */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 - -/* AlphaFunction (not supported in ES20) */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* BlendingFactorDest */ -#define GL_ZERO 0 -#define GL_ONE 1 -#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 - -/* BlendingFactorSrc */ -/* GL_ZERO */ -/* GL_ONE */ -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -/* GL_SRC_ALPHA */ -/* GL_ONE_MINUS_SRC_ALPHA */ -/* GL_DST_ALPHA */ -/* GL_ONE_MINUS_DST_ALPHA */ - -/* BlendEquationSeparate */ -#define GL_FUNC_ADD 0x8006 -#define GL_BLEND_EQUATION 0x8009 -#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ -#define GL_BLEND_EQUATION_ALPHA 0x883D - -/* BlendSubtract */ -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B - -/* Separate Blend Functions */ -#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_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 - -/* Buffer Objects */ -#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_STREAM_DRAW 0x88E0 -#define GL_STATIC_DRAW 0x88E4 -#define GL_DYNAMIC_DRAW 0x88E8 - -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 - -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 - -/* CullFaceMode */ -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_FRONT_AND_BACK 0x0408 - -/* DepthFunction */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* EnableCap */ -#define GL_TEXTURE_2D 0x0DE1 -#define GL_CULL_FACE 0x0B44 -#define GL_BLEND 0x0BE2 -#define GL_DITHER 0x0BD0 -#define GL_STENCIL_TEST 0x0B90 -#define GL_DEPTH_TEST 0x0B71 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_COVERAGE 0x80A0 - -/* ErrorCode */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 - -/* FrontFaceDirection */ -#define GL_CW 0x0900 -#define GL_CCW 0x0901 - -/* GetPName */ -#define GL_LINE_WIDTH 0x0B21 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#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_VALUE_MASK 0x0B93 -#define GL_STENCIL_WRITEMASK 0x0B98 -#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_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VIEWPORT 0x0BA2 -#define GL_SCISSOR_BOX 0x0C10 -/* GL_SCISSOR_TEST */ -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#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_POLYGON_OFFSET_UNITS 0x2A00 -/* GL_POLYGON_OFFSET_FILL */ -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB - -/* GetTextureParameter */ -/* GL_TEXTURE_MAG_FILTER */ -/* GL_TEXTURE_MIN_FILTER */ -/* GL_TEXTURE_WRAP_S */ -/* GL_TEXTURE_WRAP_T */ - -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 - -/* HintMode */ -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* HintTarget */ -#define GL_GENERATE_MIPMAP_HINT 0x8192 - -/* DataType */ -#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_FIXED 0x140C - -/* PixelFormat */ -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A - -/* PixelType */ -/* GL_UNSIGNED_BYTE */ -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 - -/* Shaders */ -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_SHADER_TYPE 0x8B4F -#define GL_DELETE_STATUS 0x8B80 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D - -/* StencilFunction */ -#define GL_NEVER 0x0200 -#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 - -/* StencilOp */ -/* GL_ZERO */ -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_INVERT 0x150A -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 - -/* StringName */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* TextureMagFilter */ -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 - -/* TextureMinFilter */ -/* GL_NEAREST */ -/* GL_LINEAR */ -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 - -/* TextureParameterName */ -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 - -/* TextureTarget */ -/* GL_TEXTURE_2D */ -#define GL_TEXTURE 0x1702 - -#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_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C - -/* TextureUnit */ -#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 - -/* TextureWrapMode */ -#define GL_REPEAT 0x2901 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MIRRORED_REPEAT 0x8370 - -/* Uniform Types */ -#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_2D 0x8B5E -#define GL_SAMPLER_CUBE 0x8B60 - -/* Vertex Arrays */ -#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_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F - -/* Read Format */ -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B - -/* Shader Source */ -#define GL_COMPILE_STATUS 0x8B81 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_SHADER_COMPILER 0x8DFA - -/* Shader Binary */ -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 - -/* Shader Precision-Specified Types */ -#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 - -/* Framebuffer Object. */ -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 - -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGB565 0x8D62 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_STENCIL_INDEX8 0x8D48 - -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#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_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_COLOR_ATTACHMENT0 0x8CE0 -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 - -#define GL_NONE 0 - -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD - -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 - -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 - -/*------------------------------------------------------------------------- - * GL core functions. - *-----------------------------------------------------------------------*/ - -GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); -GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); -GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); -GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); -GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); -GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); -GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); -GL_APICALL void GL_APIENTRY glClearStencil (GLint s); -GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); -GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); -GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); -GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); -GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); -GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); -GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); -GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); -GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); -GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); -GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); -GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glDisable (GLenum cap); -GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); -GL_APICALL void GL_APIENTRY glEnable (GLenum cap); -GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glFinish (void); -GL_APICALL void GL_APIENTRY glFlush (void); -GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); -GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); -GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); -GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); -GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); -GL_APICALL int GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); -GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL GLenum GL_APIENTRY glGetError (void); -GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); -GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); -GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); -GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); -GL_APICALL int GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); -GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); -GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); -GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); -GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); -GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); -GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); -GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); -GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); -GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); -GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); -GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); -GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); -GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); -GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); -GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); -GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); -GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); -GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); -GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); -GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); -GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); -GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); -GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); -GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); -GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); - -#ifdef __cplusplus -} -#endif - -#endif /* __gl2_h_ */ - - -#ifndef __gl2ext_h_ -#define __gl2ext_h_ - -/* $Revision: 19436 $ on $Date:: 2012-10-10 10:37:04 -0700 #$ */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -#ifndef GL_APIENTRYP -# define GL_APIENTRYP GL_APIENTRY* -#endif - -/*------------------------------------------------------------------------* - * OES extension tokens - *------------------------------------------------------------------------*/ - -/* GL_OES_compressed_ETC1_RGB8_texture */ -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_ETC1_RGB8_OES 0x8D64 -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#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 -#endif - -/* GL_OES_depth24 */ -#ifndef GL_OES_depth24 -#define GL_DEPTH_COMPONENT24_OES 0x81A6 -#endif - -/* GL_OES_depth32 */ -#ifndef GL_OES_depth32 -#define GL_DEPTH_COMPONENT32_OES 0x81A7 -#endif - -/* GL_OES_depth_texture */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -typedef void* GLeglImageOES; -#endif - -/* GL_OES_EGL_image_external */ -#ifndef GL_OES_EGL_image_external -/* GLeglImageOES defined in GL_OES_EGL_image already. */ -#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 -#endif - -/* GL_OES_element_index_uint */ -#ifndef GL_OES_element_index_uint -#define GL_UNSIGNED_INT 0x1405 -#endif - -/* GL_OES_get_program_binary */ -#ifndef GL_OES_get_program_binary -#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE -#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF -#endif - -/* GL_OES_mapbuffer */ -#ifndef GL_OES_mapbuffer -#define GL_WRITE_ONLY_OES 0x88B9 -#define GL_BUFFER_ACCESS_OES 0x88BB -#define GL_BUFFER_MAPPED_OES 0x88BC -#define GL_BUFFER_MAP_POINTER_OES 0x88BD -#endif - -/* GL_OES_packed_depth_stencil */ -#ifndef GL_OES_packed_depth_stencil -#define GL_DEPTH_STENCIL_OES 0x84F9 -#define GL_UNSIGNED_INT_24_8_OES 0x84FA -#define GL_DEPTH24_STENCIL8_OES 0x88F0 -#endif - -/* GL_OES_required_internalformat */ -#ifndef GL_OES_required_internalformat -#define GL_ALPHA8_OES 0x803C -#define GL_DEPTH_COMPONENT16_OES 0x81A5 -/* reuse GL_DEPTH_COMPONENT24_OES */ -/* reuse GL_DEPTH24_STENCIL8_OES */ -/* reuse GL_DEPTH_COMPONENT32_OES */ -#define GL_LUMINANCE4_ALPHA4_OES 0x8043 -#define GL_LUMINANCE8_ALPHA8_OES 0x8045 -#define GL_LUMINANCE8_OES 0x8040 -#define GL_RGBA4_OES 0x8056 -#define GL_RGB5_A1_OES 0x8057 -#define GL_RGB565_OES 0x8D62 -/* reuse GL_RGB8_OES */ -/* reuse GL_RGBA8_OES */ -/* reuse GL_RGB10_EXT */ -/* reuse GL_RGB10_A2_EXT */ -#endif - -/* GL_OES_rgb8_rgba8 */ -#ifndef GL_OES_rgb8_rgba8 -#define GL_RGB8_OES 0x8051 -#define GL_RGBA8_OES 0x8058 -#endif - -/* GL_OES_standard_derivatives */ -#ifndef GL_OES_standard_derivatives -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B -#endif - -/* GL_OES_stencil1 */ -#ifndef GL_OES_stencil1 -#define GL_STENCIL_INDEX1_OES 0x8D46 -#endif - -/* GL_OES_stencil4 */ -#ifndef GL_OES_stencil4 -#define GL_STENCIL_INDEX4_OES 0x8D47 -#endif - -#ifndef GL_OES_surfaceless_context -#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 -#endif - -/* GL_OES_texture_3D */ -#ifndef GL_OES_texture_3D -#define GL_TEXTURE_WRAP_R_OES 0x8072 -#define GL_TEXTURE_3D_OES 0x806F -#define GL_TEXTURE_BINDING_3D_OES 0x806A -#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 -#define GL_SAMPLER_3D_OES 0x8B5F -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 -#endif - -/* GL_OES_texture_float */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_float_linear */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_half_float */ -#ifndef GL_OES_texture_half_float -#define GL_HALF_FLOAT_OES 0x8D61 -#endif - -/* GL_OES_texture_half_float_linear */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_npot */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_vertex_array_object */ -#ifndef GL_OES_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 -#endif - -/* GL_OES_vertex_half_float */ -/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */ - -/* GL_OES_vertex_type_10_10_10_2 */ -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 -#define GL_INT_10_10_10_2_OES 0x8DF7 -#endif - -/*------------------------------------------------------------------------* - * KHR extension tokens - *------------------------------------------------------------------------*/ - -#ifndef GL_KHR_debug -typedef void (GL_APIENTRYP GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#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 -/* PROGRAM_PIPELINE only in GL */ -#define GL_SAMPLER 0x82E6 -/* DISPLAY_LIST only in GL */ -#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 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#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 -#endif - -/*------------------------------------------------------------------------* - * AMD extension tokens - *------------------------------------------------------------------------*/ - -/* GL_AMD_compressed_3DC_texture */ -#ifndef GL_AMD_compressed_3DC_texture -#define GL_3DC_X_AMD 0x87F9 -#define GL_3DC_XY_AMD 0x87FA -#endif - -/* GL_AMD_compressed_ATC_texture */ -#ifndef GL_AMD_compressed_ATC_texture -#define GL_ATC_RGB_AMD 0x8C92 -#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 -#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE -#endif - -/* GL_AMD_performance_monitor */ -#ifndef GL_AMD_performance_monitor -#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 -#endif - -/* GL_AMD_program_binary_Z400 */ -#ifndef GL_AMD_program_binary_Z400 -#define GL_Z400_BINARY_AMD 0x8740 -#endif - -/*------------------------------------------------------------------------* - * ANGLE extension tokens - *------------------------------------------------------------------------*/ - -/* GL_ANGLE_framebuffer_blit */ -#ifndef GL_ANGLE_framebuffer_blit -#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA -#endif - -/* GL_ANGLE_framebuffer_multisample */ -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 -#define GL_MAX_SAMPLES_ANGLE 0x8D57 -#endif - -/* GL_ANGLE_instanced_arrays */ -#ifndef GL_ANGLE_instanced_arrays -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE -#endif - -/* GL_ANGLE_pack_reverse_row_order */ -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 -#endif - -/* GL_ANGLE_texture_compression_dxt3 */ -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#endif - -/* GL_ANGLE_texture_compression_dxt5 */ -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 -#endif - -/* GL_ANGLE_texture_usage */ -#ifndef GL_ANGLE_texture_usage -#define GL_TEXTURE_USAGE_ANGLE 0x93A2 -#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 -#endif - -/* GL_ANGLE_translated_shader_source */ -#ifndef GL_ANGLE_translated_shader_source -#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 -#endif - -/*------------------------------------------------------------------------* - * APPLE extension tokens - *------------------------------------------------------------------------*/ - -/* GL_APPLE_copy_texture_levels */ -/* No new tokens introduced by this extension. */ - -/* GL_APPLE_framebuffer_multisample */ -#ifndef GL_APPLE_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 -#define GL_MAX_SAMPLES_APPLE 0x8D57 -#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA -#endif - -/* GL_APPLE_rgb_422 */ -#ifndef GL_APPLE_rgb_422 -#define GL_RGB_422_APPLE 0x8A1F -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif - -/* GL_APPLE_sync */ -#ifndef GL_APPLE_sync - -#ifndef __gl3_h_ -/* These types are defined with reference to - * in the Apple extension spec, but here we use the Khronos - * portable types in khrplatform.h, and assume those types - * are always defined. - * If any other extensions using these types are defined, - * the typedefs must move out of this block and be shared. - */ -typedef khronos_int64_t GLint64; -typedef khronos_uint64_t GLuint64; -typedef struct __GLsync *GLsync; -#endif - -#define GL_SYNC_OBJECT_APPLE 0x8A53 -#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 -#define GL_OBJECT_TYPE_APPLE 0x9112 -#define GL_SYNC_CONDITION_APPLE 0x9113 -#define GL_SYNC_STATUS_APPLE 0x9114 -#define GL_SYNC_FLAGS_APPLE 0x9115 -#define GL_SYNC_FENCE_APPLE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 -#define GL_UNSIGNALED_APPLE 0x9118 -#define GL_SIGNALED_APPLE 0x9119 -#define GL_ALREADY_SIGNALED_APPLE 0x911A -#define GL_TIMEOUT_EXPIRED_APPLE 0x911B -#define GL_CONDITION_SATISFIED_APPLE 0x911C -#define GL_WAIT_FAILED_APPLE 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 -#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull -#endif - -/* GL_APPLE_texture_format_BGRA8888 */ -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_BGRA_EXT 0x80E1 -#endif - -/* GL_APPLE_texture_max_level */ -#ifndef GL_APPLE_texture_max_level -#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D -#endif - -/*------------------------------------------------------------------------* - * ARM extension tokens - *------------------------------------------------------------------------*/ - -/* GL_ARM_mali_program_binary */ -#ifndef GL_ARM_mali_program_binary -#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 -#endif - -/* GL_ARM_mali_shader_binary */ -#ifndef GL_ARM_mali_shader_binary -#define GL_MALI_SHADER_BINARY_ARM 0x8F60 -#endif - -/* GL_ARM_rgba8 */ -/* No new tokens introduced by this extension. */ - -/*------------------------------------------------------------------------* - * EXT extension tokens - *------------------------------------------------------------------------*/ - -/* GL_EXT_blend_minmax */ -#ifndef GL_EXT_blend_minmax -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#endif - -/* GL_EXT_color_buffer_half_float */ -#ifndef GL_EXT_color_buffer_half_float -#define GL_RGBA16F_EXT 0x881A -#define GL_RGB16F_EXT 0x881B -#define GL_RG16F_EXT 0x822F -#define GL_R16F_EXT 0x822D -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 -#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 -#endif - -/* GL_EXT_debug_label */ -#ifndef GL_EXT_debug_label -#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F -#define GL_PROGRAM_OBJECT_EXT 0x8B40 -#define GL_SHADER_OBJECT_EXT 0x8B48 -#define GL_BUFFER_OBJECT_EXT 0x9151 -#define GL_QUERY_OBJECT_EXT 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 -#endif - -/* GL_EXT_debug_marker */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_discard_framebuffer */ -#ifndef GL_EXT_discard_framebuffer -#define GL_COLOR_EXT 0x1800 -#define GL_DEPTH_EXT 0x1801 -#define GL_STENCIL_EXT 0x1802 -#endif - -/* GL_EXT_map_buffer_range */ -#ifndef GL_EXT_map_buffer_range -#define GL_MAP_READ_BIT_EXT 0x0001 -#define GL_MAP_WRITE_BIT_EXT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 -#endif - -/* GL_EXT_multisampled_render_to_texture */ -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C -/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif - -/* GL_EXT_multiview_draw_buffers */ -#ifndef GL_EXT_multiview_draw_buffers -#define GL_COLOR_ATTACHMENT_EXT 0x90F0 -#define GL_MULTIVIEW_EXT 0x90F1 -#define GL_DRAW_BUFFER_EXT 0x0C01 -#define GL_READ_BUFFER_EXT 0x0C02 -#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 -#endif - -/* GL_EXT_multi_draw_arrays */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_occlusion_query_boolean */ -#ifndef GL_EXT_occlusion_query_boolean -#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A -#define GL_CURRENT_QUERY_EXT 0x8865 -#define GL_QUERY_RESULT_EXT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 -#endif - -/* GL_EXT_read_format_bgra */ -#ifndef GL_EXT_read_format_bgra -#define GL_BGRA_EXT 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 -#endif - -/* GL_EXT_robustness */ -#ifndef GL_EXT_robustness -/* reuse GL_NO_ERROR */ -#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 -#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 -#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 -#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 -#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 -#endif - -/* GL_EXT_separate_shader_objects */ -#ifndef GL_EXT_separate_shader_objects -#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 -#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE_EXT 0x8258 -#define GL_ACTIVE_PROGRAM_EXT 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A -#endif - -/* GL_EXT_shader_framebuffer_fetch */ -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 -#endif - -/* GL_EXT_shader_texture_lod */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_shadow_samplers */ -#ifndef GL_EXT_shadow_samplers -#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C -#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D -#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E -#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 -#endif - -/* GL_EXT_sRGB */ -#ifndef GL_EXT_sRGB -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 -#endif - -/* GL_EXT_texture_compression_dxt1 */ -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#endif - -/* GL_EXT_texture_filter_anisotropic */ -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -/* GL_EXT_texture_format_BGRA8888 */ -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_BGRA_EXT 0x80E1 -#endif - -/* GL_EXT_texture_rg */ -#ifndef GL_EXT_texture_rg -#define GL_RED_EXT 0x1903 -#define GL_RG_EXT 0x8227 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#endif - -/* GL_EXT_texture_storage */ -#ifndef GL_EXT_texture_storage -#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F -#define GL_ALPHA8_EXT 0x803C -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_RGBA32F_EXT 0x8814 -#define GL_RGB32F_EXT 0x8815 -#define GL_ALPHA32F_EXT 0x8816 -#define GL_LUMINANCE32F_EXT 0x8818 -#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 -/* reuse GL_RGBA16F_EXT */ -/* reuse GL_RGB16F_EXT */ -#define GL_ALPHA16F_EXT 0x881C -#define GL_LUMINANCE16F_EXT 0x881E -#define GL_LUMINANCE_ALPHA16F_EXT 0x881F -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGB10_EXT 0x8052 -#define GL_BGRA8_EXT 0x93A1 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#define GL_R32F_EXT 0x822E -#define GL_RG32F_EXT 0x8230 -#define GL_R16F_EXT 0x822D -#define GL_RG16F_EXT 0x822F -#endif - -/* GL_EXT_texture_type_2_10_10_10_REV */ -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 -#endif - -/* GL_EXT_unpack_subimage */ -#ifndef GL_EXT_unpack_subimage -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#endif - -/*------------------------------------------------------------------------* - * DMP extension tokens - *------------------------------------------------------------------------*/ - -/* GL_DMP_shader_binary */ -#ifndef GL_DMP_shader_binary -#define GL_SHADER_BINARY_DMP 0x9250 -#endif - -/*------------------------------------------------------------------------* - * FJ extension tokens - *------------------------------------------------------------------------*/ - -/* GL_FJ_shader_binary_GCCSO */ -#ifndef GL_FJ_shader_binary_GCCSO -#define GCCSO_SHADER_BINARY_FJ 0x9260 -#endif - -/*------------------------------------------------------------------------* - * IMG extension tokens - *------------------------------------------------------------------------*/ - -/* GL_IMG_program_binary */ -#ifndef GL_IMG_program_binary -#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 -#endif - -/* GL_IMG_read_format */ -#ifndef GL_IMG_read_format -#define GL_BGRA_IMG 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 -#endif - -/* GL_IMG_shader_binary */ -#ifndef GL_IMG_shader_binary -#define GL_SGX_BINARY_IMG 0x8C0A -#endif - -/* GL_IMG_texture_compression_pvrtc */ -#ifndef GL_IMG_texture_compression_pvrtc -#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 -#endif - -/* GL_IMG_multisampled_render_to_texture */ -#ifndef GL_IMG_multisampled_render_to_texture -#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 -#endif - -/*------------------------------------------------------------------------* - * NV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_NV_coverage_sample */ -#ifndef GL_NV_coverage_sample -#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_COVERAGE_BUFFER_BIT_NV 0x8000 -#endif - -/* GL_NV_depth_nonlinear */ -#ifndef GL_NV_depth_nonlinear -#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C -#endif - -/* GL_NV_draw_buffers */ -#ifndef GL_NV_draw_buffers -#define GL_MAX_DRAW_BUFFERS_NV 0x8824 -#define GL_DRAW_BUFFER0_NV 0x8825 -#define GL_DRAW_BUFFER1_NV 0x8826 -#define GL_DRAW_BUFFER2_NV 0x8827 -#define GL_DRAW_BUFFER3_NV 0x8828 -#define GL_DRAW_BUFFER4_NV 0x8829 -#define GL_DRAW_BUFFER5_NV 0x882A -#define GL_DRAW_BUFFER6_NV 0x882B -#define GL_DRAW_BUFFER7_NV 0x882C -#define GL_DRAW_BUFFER8_NV 0x882D -#define GL_DRAW_BUFFER9_NV 0x882E -#define GL_DRAW_BUFFER10_NV 0x882F -#define GL_DRAW_BUFFER11_NV 0x8830 -#define GL_DRAW_BUFFER12_NV 0x8831 -#define GL_DRAW_BUFFER13_NV 0x8832 -#define GL_DRAW_BUFFER14_NV 0x8833 -#define GL_DRAW_BUFFER15_NV 0x8834 -#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 -#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 -#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 -#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 -#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 -#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 -#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 -#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 -#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 -#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 -#define GL_COLOR_ATTACHMENT10_NV 0x8CEA -#define GL_COLOR_ATTACHMENT11_NV 0x8CEB -#define GL_COLOR_ATTACHMENT12_NV 0x8CEC -#define GL_COLOR_ATTACHMENT13_NV 0x8CED -#define GL_COLOR_ATTACHMENT14_NV 0x8CEE -#define GL_COLOR_ATTACHMENT15_NV 0x8CEF -#endif - -/* GL_NV_fbo_color_attachments */ -#ifndef GL_NV_fbo_color_attachments -#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF -/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */ -#endif - -/* GL_NV_fence */ -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif - -/* GL_NV_read_buffer */ -#ifndef GL_NV_read_buffer -#define GL_READ_BUFFER_NV 0x0C02 -#endif - -/* GL_NV_read_buffer_front */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_depth */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_depth_stencil */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_stencil */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_texture_compression_s3tc_update */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_texture_npot_2D_mipmap */ -/* No new tokens introduced by this extension. */ - -/*------------------------------------------------------------------------* - * QCOM extension tokens - *------------------------------------------------------------------------*/ - -/* GL_QCOM_alpha_test */ -#ifndef GL_QCOM_alpha_test -#define GL_ALPHA_TEST_QCOM 0x0BC0 -#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 -#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 -#endif - -/* GL_QCOM_binning_control */ -#ifndef GL_QCOM_binning_control -#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 -#endif - -/* GL_QCOM_driver_control */ -/* No new tokens introduced by this extension. */ - -/* GL_QCOM_extended_get */ -#ifndef GL_QCOM_extended_get -#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 -#endif - -/* GL_QCOM_extended_get2 */ -/* No new tokens introduced by this extension. */ - -/* GL_QCOM_perfmon_global_mode */ -#ifndef GL_QCOM_perfmon_global_mode -#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 -#endif - -/* GL_QCOM_writeonly_rendering */ -#ifndef GL_QCOM_writeonly_rendering -#define GL_WRITEONLY_RENDERING_QCOM 0x8823 -#endif - -/* GL_QCOM_tiled_rendering */ -#ifndef GL_QCOM_tiled_rendering -#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 -#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 -#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 -#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 -#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 -#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 -#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 -#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 -#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 -#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 -#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 -#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 -#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 -#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 -#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 -#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 -#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 -#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 -#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 -#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 -#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 -#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 -#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 -#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 -#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 -#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 -#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 -#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 -#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 -#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 -#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 -#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 -#endif - -/*------------------------------------------------------------------------* - * VIV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_VIV_shader_binary */ -#ifndef GL_VIV_shader_binary -#define GL_SHADER_BINARY_VIV 0x8FC4 -#endif - -/*------------------------------------------------------------------------* - * End of extension tokens, start of corresponding extension functions - *------------------------------------------------------------------------*/ - -/*------------------------------------------------------------------------* - * OES extension functions - *------------------------------------------------------------------------*/ - -/* GL_OES_compressed_ETC1_RGB8_texture */ -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_OES_compressed_ETC1_RGB8_texture 1 -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -#endif - -/* GL_OES_depth24 */ -#ifndef GL_OES_depth24 -#define GL_OES_depth24 1 -#endif - -/* GL_OES_depth32 */ -#ifndef GL_OES_depth32 -#define GL_OES_depth32 1 -#endif - -/* GL_OES_depth_texture */ -#ifndef GL_OES_depth_texture -#define GL_OES_depth_texture 1 -#endif - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); -GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); -#endif -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); -#endif - -/* GL_OES_EGL_image_external */ -#ifndef GL_OES_EGL_image_external -#define GL_OES_EGL_image_external 1 -/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ -#endif - -/* GL_OES_element_index_uint */ -#ifndef GL_OES_element_index_uint -#define GL_OES_element_index_uint 1 -#endif - -/* GL_OES_fbo_render_mipmap */ -#ifndef GL_OES_fbo_render_mipmap -#define GL_OES_fbo_render_mipmap 1 -#endif - -/* GL_OES_fragment_precision_high */ -#ifndef GL_OES_fragment_precision_high -#define GL_OES_fragment_precision_high 1 -#endif - -/* GL_OES_get_program_binary */ -#ifndef GL_OES_get_program_binary -#define GL_OES_get_program_binary 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); -#endif -typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); -#endif - -/* GL_OES_mapbuffer */ -#ifndef GL_OES_mapbuffer -#define GL_OES_mapbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); -GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); -GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid** params); -#endif -typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); -typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid** params); -#endif - -/* GL_OES_packed_depth_stencil */ -#ifndef GL_OES_packed_depth_stencil -#define GL_OES_packed_depth_stencil 1 -#endif - -/* GL_OES_required_internalformat */ -#ifndef GL_OES_required_internalformat -#define GL_OES_required_internalformat 1 -#endif - -/* GL_OES_rgb8_rgba8 */ -#ifndef GL_OES_rgb8_rgba8 -#define GL_OES_rgb8_rgba8 1 -#endif - -/* GL_OES_standard_derivatives */ -#ifndef GL_OES_standard_derivatives -#define GL_OES_standard_derivatives 1 -#endif - -/* GL_OES_stencil1 */ -#ifndef GL_OES_stencil1 -#define GL_OES_stencil1 1 -#endif - -/* GL_OES_stencil4 */ -#ifndef GL_OES_stencil4 -#define GL_OES_stencil4 1 -#endif - -#ifndef GL_OES_surfaceless_context -#define GL_OES_surfaceless_context 1 -#endif - -/* GL_OES_texture_3D */ -#ifndef GL_OES_texture_3D -#define GL_OES_texture_3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#endif -typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (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 (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (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 (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOES) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#endif - -/* GL_OES_texture_float */ -#ifndef GL_OES_texture_float -#define GL_OES_texture_float 1 -#endif - -/* GL_OES_texture_float_linear */ -#ifndef GL_OES_texture_float_linear -#define GL_OES_texture_float_linear 1 -#endif - -/* GL_OES_texture_half_float */ -#ifndef GL_OES_texture_half_float -#define GL_OES_texture_half_float 1 -#endif - -/* GL_OES_texture_half_float_linear */ -#ifndef GL_OES_texture_half_float_linear -#define GL_OES_texture_half_float_linear 1 -#endif - -/* GL_OES_texture_npot */ -#ifndef GL_OES_texture_npot -#define GL_OES_texture_npot 1 -#endif - -/* GL_OES_vertex_array_object */ -#ifndef GL_OES_vertex_array_object -#define GL_OES_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); -GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); -GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); -GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); -#endif -typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); -typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); -typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); -#endif - -/* GL_OES_vertex_half_float */ -#ifndef GL_OES_vertex_half_float -#define GL_OES_vertex_half_float 1 -#endif - -/* GL_OES_vertex_type_10_10_10_2 */ -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_OES_vertex_type_10_10_10_2 1 -#endif - -/*------------------------------------------------------------------------* - * KHR extension functions - *------------------------------------------------------------------------*/ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GL_APICALL void GL_APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GL_APICALL void GL_APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); -GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GL_APICALL void GL_APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); -GL_APICALL void GL_APIENTRY glPopDebugGroup (void); -GL_APICALL void GL_APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glGetPointerv (GLenum pname, void **params); -#endif -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); -typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (GL_APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, void **params); -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -#endif - - -/*------------------------------------------------------------------------* - * AMD extension functions - *------------------------------------------------------------------------*/ - -/* GL_AMD_compressed_3DC_texture */ -#ifndef GL_AMD_compressed_3DC_texture -#define GL_AMD_compressed_3DC_texture 1 -#endif - -/* GL_AMD_compressed_ATC_texture */ -#ifndef GL_AMD_compressed_ATC_texture -#define GL_AMD_compressed_ATC_texture 1 -#endif - -/* AMD_performance_monitor */ -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); -GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); -typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif - -/* GL_AMD_program_binary_Z400 */ -#ifndef GL_AMD_program_binary_Z400 -#define GL_AMD_program_binary_Z400 1 -#endif - -/*------------------------------------------------------------------------* - * ANGLE extension functions - *------------------------------------------------------------------------*/ - -/* GL_ANGLE_framebuffer_blit */ -#ifndef GL_ANGLE_framebuffer_blit -#define GL_ANGLE_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -/* GL_ANGLE_framebuffer_multisample */ -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_ANGLE_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_ANGLE_instanced_arrays -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); -#endif -typedef void (GL_APIENTRYP PFLGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GL_APIENTRYP PFLGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -typedef void (GL_APIENTRYP PFLGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); -#endif - -/* GL_ANGLE_pack_reverse_row_order */ -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_ANGLE_pack_reverse_row_order 1 -#endif - -/* GL_ANGLE_texture_compression_dxt3 */ -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_ANGLE_texture_compression_dxt3 1 -#endif - -/* GL_ANGLE_texture_compression_dxt5 */ -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_ANGLE_texture_compression_dxt5 1 -#endif - -/* GL_ANGLE_texture_usage */ -#ifndef GL_ANGLE_texture_usage -#define GL_ANGLE_texture_usage 1 -#endif - -#ifndef GL_ANGLE_translated_shader_source -#define GL_ANGLE_translated_shader_source 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#endif -typedef void (GL_APIENTRYP PFLGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#endif - -/*------------------------------------------------------------------------* - * APPLE extension functions - *------------------------------------------------------------------------*/ - -/* GL_APPLE_copy_texture_levels */ -#ifndef GL_APPLE_copy_texture_levels -#define GL_APPLE_copy_texture_levels 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#endif -typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#endif - -/* GL_APPLE_framebuffer_multisample */ -#ifndef GL_APPLE_framebuffer_multisample -#define GL_APPLE_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); -#endif - -/* GL_APPLE_rgb_422 */ -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#endif - -/* GL_APPLE_sync */ -#ifndef GL_APPLE_sync -#define GL_APPLE_sync 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); -GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); -GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); -GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); -GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif -typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); -typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); -typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); -typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif - -/* GL_APPLE_texture_format_BGRA8888 */ -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_APPLE_texture_format_BGRA8888 1 -#endif - -/* GL_APPLE_texture_max_level */ -#ifndef GL_APPLE_texture_max_level -#define GL_APPLE_texture_max_level 1 -#endif - -/*------------------------------------------------------------------------* - * ARM extension functions - *------------------------------------------------------------------------*/ - -/* GL_ARM_mali_program_binary */ -#ifndef GL_ARM_mali_program_binary -#define GL_ARM_mali_program_binary 1 -#endif - -/* GL_ARM_mali_shader_binary */ -#ifndef GL_ARM_mali_shader_binary -#define GL_ARM_mali_shader_binary 1 -#endif - -/* GL_ARM_rgba8 */ -#ifndef GL_ARM_rgba8 -#define GL_ARM_rgba8 1 -#endif - -/*------------------------------------------------------------------------* - * EXT extension functions - *------------------------------------------------------------------------*/ - -/* GL_EXT_blend_minmax */ -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#endif - -/* GL_EXT_color_buffer_half_float */ -#ifndef GL_EXT_color_buffer_half_float -#define GL_EXT_color_buffer_half_float 1 -#endif - -/* GL_EXT_debug_label */ -#ifndef GL_EXT_debug_label -#define GL_EXT_debug_label 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif - -/* GL_EXT_debug_marker */ -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); -#endif -typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); -#endif - -/* GL_EXT_discard_framebuffer */ -#ifndef GL_EXT_discard_framebuffer -#define GL_EXT_discard_framebuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#endif -typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#endif - -/* GL_EXT_map_buffer_range */ -#ifndef GL_EXT_map_buffer_range -#define GL_EXT_map_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); -#endif -typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -#endif - -/* GL_EXT_multisampled_render_to_texture */ -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_EXT_multisampled_render_to_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif - -/* GL_EXT_multiview_draw_buffers */ -#ifndef GL_EXT_multiview_draw_buffers -#define GL_EXT_multiview_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); -GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); -GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); -#endif -typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); -typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); -GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif - -/* GL_EXT_occlusion_query_boolean */ -#ifndef GL_EXT_occlusion_query_boolean -#define GL_EXT_occlusion_query_boolean 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); -GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); -GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); -GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); -GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); -GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); -#endif -typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); -typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); -typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); -typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -/* GL_EXT_read_format_bgra */ -#ifndef GL_EXT_read_format_bgra -#define GL_EXT_read_format_bgra 1 -#endif - -/* GL_EXT_robustness */ -#ifndef GL_EXT_robustness -#define GL_EXT_robustness 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); -GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, float *params); -GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#endif -typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); -typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, float *params); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#endif - -/* GL_EXT_separate_shader_objects */ -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); -GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); -GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); -GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); -GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); -GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); -GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); -GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); -GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); -GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif -typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); -typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); -typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); -typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif - -/* GL_EXT_shader_framebuffer_fetch */ -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_EXT_shader_framebuffer_fetch 1 -#endif - -/* GL_EXT_shader_texture_lod */ -#ifndef GL_EXT_shader_texture_lod -#define GL_EXT_shader_texture_lod 1 -#endif - -/* GL_EXT_shadow_samplers */ -#ifndef GL_EXT_shadow_samplers -#define GL_EXT_shadow_samplers 1 -#endif - -/* GL_EXT_sRGB */ -#ifndef GL_EXT_sRGB -#define GL_EXT_sRGB 1 -#endif - -/* GL_EXT_texture_compression_dxt1 */ -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_EXT_texture_compression_dxt1 1 -#endif - -/* GL_EXT_texture_filter_anisotropic */ -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -/* GL_EXT_texture_format_BGRA8888 */ -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_EXT_texture_format_BGRA8888 1 -#endif - -/* GL_EXT_texture_rg */ -#ifndef GL_EXT_texture_rg -#define GL_EXT_texture_rg 1 -#endif - -/* GL_EXT_texture_storage */ -#ifndef GL_EXT_texture_storage -#define GL_EXT_texture_storage 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif - -/* GL_EXT_texture_type_2_10_10_10_REV */ -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_EXT_texture_type_2_10_10_10_REV 1 -#endif - -/* GL_EXT_unpack_subimage */ -#ifndef GL_EXT_unpack_subimage -#define GL_EXT_unpack_subimage 1 -#endif - -/*------------------------------------------------------------------------* - * DMP extension functions - *------------------------------------------------------------------------*/ - -/* GL_DMP_shader_binary */ -#ifndef GL_DMP_shader_binary -#define GL_DMP_shader_binary 1 -#endif - -/*------------------------------------------------------------------------* - * FJ extension functions - *------------------------------------------------------------------------*/ - -/* GL_FJ_shader_binary_GCCSO */ -#ifndef GL_FJ_shader_binary_GCCSO -#define GL_FJ_shader_binary_GCCSO 1 -#endif - -/*------------------------------------------------------------------------* - * IMG extension functions - *------------------------------------------------------------------------*/ - -/* GL_IMG_program_binary */ -#ifndef GL_IMG_program_binary -#define GL_IMG_program_binary 1 -#endif - -/* GL_IMG_read_format */ -#ifndef GL_IMG_read_format -#define GL_IMG_read_format 1 -#endif - -/* GL_IMG_shader_binary */ -#ifndef GL_IMG_shader_binary -#define GL_IMG_shader_binary 1 -#endif - -/* GL_IMG_texture_compression_pvrtc */ -#ifndef GL_IMG_texture_compression_pvrtc -#define GL_IMG_texture_compression_pvrtc 1 -#endif - -/* GL_IMG_multisampled_render_to_texture */ -#ifndef GL_IMG_multisampled_render_to_texture -#define GL_IMG_multisampled_render_to_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif - -/*------------------------------------------------------------------------* - * NV extension functions - *------------------------------------------------------------------------*/ - -/* GL_NV_coverage_sample */ -#ifndef GL_NV_coverage_sample -#define GL_NV_coverage_sample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); -GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); -#endif -typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); -typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); -#endif - -/* GL_NV_depth_nonlinear */ -#ifndef GL_NV_depth_nonlinear -#define GL_NV_depth_nonlinear 1 -#endif - -/* GL_NV_draw_buffers */ -#ifndef GL_NV_draw_buffers -#define GL_NV_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); -#endif -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); -#endif - -/* GL_NV_fbo_color_attachments */ -#ifndef GL_NV_fbo_color_attachments -#define GL_NV_fbo_color_attachments 1 -#endif - -/* GL_NV_fence */ -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); -GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei, GLuint *); -GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint); -GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint); -GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); -GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint); -GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint, GLenum); -#endif -typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -/* GL_NV_read_buffer */ -#ifndef GL_NV_read_buffer -#define GL_NV_read_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); -#endif -typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); -#endif - -/* GL_NV_read_buffer_front */ -#ifndef GL_NV_read_buffer_front -#define GL_NV_read_buffer_front 1 -#endif - -/* GL_NV_read_depth */ -#ifndef GL_NV_read_depth -#define GL_NV_read_depth 1 -#endif - -/* GL_NV_read_depth_stencil */ -#ifndef GL_NV_read_depth_stencil -#define GL_NV_read_depth_stencil 1 -#endif - -/* GL_NV_read_stencil */ -#ifndef GL_NV_read_stencil -#define GL_NV_read_stencil 1 -#endif - -/* GL_NV_texture_compression_s3tc_update */ -#ifndef GL_NV_texture_compression_s3tc_update -#define GL_NV_texture_compression_s3tc_update 1 -#endif - -/* GL_NV_texture_npot_2D_mipmap */ -#ifndef GL_NV_texture_npot_2D_mipmap -#define GL_NV_texture_npot_2D_mipmap 1 -#endif - -/*------------------------------------------------------------------------* - * QCOM extension functions - *------------------------------------------------------------------------*/ - -/* GL_QCOM_alpha_test */ -#ifndef GL_QCOM_alpha_test -#define GL_QCOM_alpha_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); -#endif -typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); -#endif - -/* GL_QCOM_binning_control */ -#ifndef GL_QCOM_binning_control -#define GL_QCOM_binning_control 1 -#endif - -/* GL_QCOM_driver_control */ -#ifndef GL_QCOM_driver_control -#define GL_QCOM_driver_control 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); -GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); -GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); -#endif -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -#endif - -/* GL_QCOM_extended_get */ -#ifndef GL_QCOM_extended_get -#define GL_QCOM_extended_get 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); -GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); -GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); -#endif -typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); -#endif - -/* GL_QCOM_extended_get2 */ -#ifndef GL_QCOM_extended_get2 -#define GL_QCOM_extended_get2 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); -GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); -GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#endif -typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#endif - -/* GL_QCOM_perfmon_global_mode */ -#ifndef GL_QCOM_perfmon_global_mode -#define GL_QCOM_perfmon_global_mode 1 -#endif - -/* GL_QCOM_writeonly_rendering */ -#ifndef GL_QCOM_writeonly_rendering -#define GL_QCOM_writeonly_rendering 1 -#endif - -/* GL_QCOM_tiled_rendering */ -#ifndef GL_QCOM_tiled_rendering -#define GL_QCOM_tiled_rendering 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); -#endif -typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); -#endif - -/*------------------------------------------------------------------------* - * VIV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_VIV_shader_binary */ -#ifndef GL_VIV_shader_binary -#define GL_VIV_shader_binary 1 -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __gl2ext_h_ */ +#include "SDL_opengles2_khrplatform.h" +#include "SDL_opengles2_gl2platform.h" +#include "SDL_opengles2_gl2.h" +#include "SDL_opengles2_gl2ext.h" #endif /* _MSC_VER */ diff --git a/code/SDL2/include/SDL_opengles2_gl2.h b/code/SDL2/include/SDL_opengles2_gl2.h new file mode 100644 index 00000000..c62fb0a5 --- /dev/null +++ b/code/SDL2/include/SDL_opengles2_gl2.h @@ -0,0 +1,621 @@ +#ifndef __gl2_h_ +#define __gl2_h_ + +/* $Revision: 20555 $ on $Date:: 2013-02-12 14:32:47 -0800 #$ */ + +/*#include */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/*------------------------------------------------------------------------- + * Data type definitions + *-----------------------------------------------------------------------*/ + +typedef void GLvoid; +typedef char GLchar; +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef khronos_int8_t GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLsizei; +typedef khronos_uint8_t GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; +typedef khronos_int32_t GLfixed; + +/* GL types for handling large vertex buffer objects */ +typedef khronos_intptr_t GLintptr; +typedef khronos_ssize_t GLsizeiptr; + +/* OpenGL ES core versions */ +#define GL_ES_VERSION_2_0 1 + +/* ClearBufferMask */ +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_COLOR_BUFFER_BIT 0x00004000 + +/* Boolean */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* BeginMode */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 + +/* AlphaFunction (not supported in ES20) */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* BlendingFactorDest */ +#define GL_ZERO 0 +#define GL_ONE 1 +#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 + +/* BlendingFactorSrc */ +/* GL_ZERO */ +/* GL_ONE */ +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +/* GL_SRC_ALPHA */ +/* GL_ONE_MINUS_SRC_ALPHA */ +/* GL_DST_ALPHA */ +/* GL_ONE_MINUS_DST_ALPHA */ + +/* BlendEquationSeparate */ +#define GL_FUNC_ADD 0x8006 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ +#define GL_BLEND_EQUATION_ALPHA 0x883D + +/* BlendSubtract */ +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B + +/* Separate Blend Functions */ +#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_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 + +/* Buffer Objects */ +#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_STREAM_DRAW 0x88E0 +#define GL_STATIC_DRAW 0x88E4 +#define GL_DYNAMIC_DRAW 0x88E8 + +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 + +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 + +/* CullFaceMode */ +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_FRONT_AND_BACK 0x0408 + +/* DepthFunction */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* EnableCap */ +#define GL_TEXTURE_2D 0x0DE1 +#define GL_CULL_FACE 0x0B44 +#define GL_BLEND 0x0BE2 +#define GL_DITHER 0x0BD0 +#define GL_STENCIL_TEST 0x0B90 +#define GL_DEPTH_TEST 0x0B71 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_COVERAGE 0x80A0 + +/* ErrorCode */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_OUT_OF_MEMORY 0x0505 + +/* FrontFaceDirection */ +#define GL_CW 0x0900 +#define GL_CCW 0x0901 + +/* GetPName */ +#define GL_LINE_WIDTH 0x0B21 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#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_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#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_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VIEWPORT 0x0BA2 +#define GL_SCISSOR_BOX 0x0C10 +/* GL_SCISSOR_TEST */ +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_SUBPIXEL_BITS 0x0D50 +#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_POLYGON_OFFSET_UNITS 0x2A00 +/* GL_POLYGON_OFFSET_FILL */ +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB + +/* GetTextureParameter */ +/* GL_TEXTURE_MAG_FILTER */ +/* GL_TEXTURE_MIN_FILTER */ +/* GL_TEXTURE_WRAP_S */ +/* GL_TEXTURE_WRAP_T */ + +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 + +/* HintMode */ +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* HintTarget */ +#define GL_GENERATE_MIPMAP_HINT 0x8192 + +/* DataType */ +#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_FIXED 0x140C + +/* PixelFormat */ +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A + +/* PixelType */ +/* GL_UNSIGNED_BYTE */ +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 + +/* Shaders */ +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_SHADER_TYPE 0x8B4F +#define GL_DELETE_STATUS 0x8B80 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D + +/* StencilFunction */ +#define GL_NEVER 0x0200 +#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 + +/* StencilOp */ +/* GL_ZERO */ +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_INVERT 0x150A +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 + +/* StringName */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* TextureMagFilter */ +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 + +/* TextureMinFilter */ +/* GL_NEAREST */ +/* GL_LINEAR */ +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 + +/* TextureParameterName */ +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 + +/* TextureTarget */ +/* GL_TEXTURE_2D */ +#define GL_TEXTURE 0x1702 + +#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_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C + +/* TextureUnit */ +#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 + +/* TextureWrapMode */ +#define GL_REPEAT 0x2901 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MIRRORED_REPEAT 0x8370 + +/* Uniform Types */ +#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_2D 0x8B5E +#define GL_SAMPLER_CUBE 0x8B60 + +/* Vertex Arrays */ +#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_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F + +/* Read Format */ +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B + +/* Shader Source */ +#define GL_COMPILE_STATUS 0x8B81 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_COMPILER 0x8DFA + +/* Shader Binary */ +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 + +/* Shader Precision-Specified Types */ +#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 + +/* Framebuffer Object. */ +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 + +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGB565 0x8D62 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_STENCIL_INDEX8 0x8D48 + +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#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_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_COLOR_ATTACHMENT0 0x8CE0 +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 + +#define GL_NONE 0 + +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD + +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 + +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 + +/*------------------------------------------------------------------------- + * GL core functions. + *-----------------------------------------------------------------------*/ + +GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); +GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); +GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); +GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); +GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); +GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); +GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); +GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); +GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); +GL_APICALL void GL_APIENTRY glClearStencil (GLint s); +GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); +GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); +GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); +GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); +GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); +GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); +GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); +GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); +GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); +GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); +GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); +GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glDisable (GLenum cap); +GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); +GL_APICALL void GL_APIENTRY glEnable (GLenum cap); +GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glFinish (void); +GL_APICALL void GL_APIENTRY glFlush (void); +GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); +GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); +GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); +GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); +GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); +GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); +GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL GLenum GL_APIENTRY glGetError (void); +GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); +GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); +GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); +GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); +GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); +GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); +GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); +GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); +GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); +GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); +GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); +GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); +GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); +GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); +GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); +GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); +GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); +GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); +GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); +GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); +GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); +GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); +GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); +GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); +GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); +GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); +GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2_h_ */ + diff --git a/code/SDL2/include/SDL_opengles2_gl2ext.h b/code/SDL2/include/SDL_opengles2_gl2ext.h new file mode 100644 index 00000000..e8ca8b13 --- /dev/null +++ b/code/SDL2/include/SDL_opengles2_gl2ext.h @@ -0,0 +1,2050 @@ +#ifndef __gl2ext_h_ +#define __gl2ext_h_ + +/* $Revision: 22801 $ on $Date:: 2013-08-21 03:20:48 -0700 #$ */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +#ifndef GL_APIENTRYP +# define GL_APIENTRYP GL_APIENTRY* +#endif + +/* New types shared by several extensions */ + +#ifndef __gl3_h_ +/* These are defined with respect to in the + * Apple extension spec, but they are also used by non-APPLE + * extensions, and in the Khronos header we use the Khronos + * portable types in khrplatform.h, which must be defined. + */ +typedef khronos_int64_t GLint64; +typedef khronos_uint64_t GLuint64; +typedef struct __GLsync *GLsync; +#endif + + +/*------------------------------------------------------------------------* + * OES extension tokens + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_ETC1_RGB8_OES 0x8D64 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#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 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_DEPTH_COMPONENT24_OES 0x81A6 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#endif + +/* GL_OES_depth_texture */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +/* GLeglImageOES defined in GL_OES_EGL_image already. */ +#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 +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_UNSIGNED_INT 0x1405 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE +#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_WRITE_ONLY_OES 0x88B9 +#define GL_BUFFER_ACCESS_OES 0x88BB +#define GL_BUFFER_MAPPED_OES 0x88BC +#define GL_BUFFER_MAP_POINTER_OES 0x88BD +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_ALPHA8_OES 0x803C +#define GL_DEPTH_COMPONENT16_OES 0x81A5 +/* reuse GL_DEPTH_COMPONENT24_OES */ +/* reuse GL_DEPTH24_STENCIL8_OES */ +/* reuse GL_DEPTH_COMPONENT32_OES */ +#define GL_LUMINANCE4_ALPHA4_OES 0x8043 +#define GL_LUMINANCE8_ALPHA8_OES 0x8045 +#define GL_LUMINANCE8_OES 0x8040 +#define GL_RGBA4_OES 0x8056 +#define GL_RGB5_A1_OES 0x8057 +#define GL_RGB565_OES 0x8D62 +/* reuse GL_RGB8_OES */ +/* reuse GL_RGBA8_OES */ +/* reuse GL_RGB10_EXT */ +/* reuse GL_RGB10_A2_EXT */ +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_RGB8_OES 0x8051 +#define GL_RGBA8_OES 0x8058 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_STENCIL_INDEX1_OES 0x8D46 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_STENCIL_INDEX4_OES 0x8D47 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_TEXTURE_WRAP_R_OES 0x8072 +#define GL_TEXTURE_3D_OES 0x806F +#define GL_TEXTURE_BINDING_3D_OES 0x806A +#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 +#define GL_SAMPLER_3D_OES 0x8B5F +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 +#endif + +/* GL_OES_texture_float */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_HALF_FLOAT_OES 0x8D61 +#endif + +/* GL_OES_texture_half_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_npot */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 +#endif + +/* GL_OES_vertex_half_float */ +/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */ + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 +#define GL_INT_10_10_10_2_OES 0x8DF7 +#endif + +/*------------------------------------------------------------------------* + * KHR extension tokens + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +typedef void (GL_APIENTRYP GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 +#define GL_DEBUG_SOURCE_API_KHR 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A +#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B +#define GL_DEBUG_TYPE_ERROR_KHR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 +#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 +#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D +#define GL_BUFFER_KHR 0x82E0 +#define GL_SHADER_KHR 0x82E1 +#define GL_PROGRAM_KHR 0x82E2 +#define GL_QUERY_KHR 0x82E3 +/* PROGRAM_PIPELINE only in GL */ +#define GL_SAMPLER_KHR 0x82E6 +/* DISPLAY_LIST only in GL */ +#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 +#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 +#define GL_DEBUG_OUTPUT_KHR 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 +#define GL_STACK_OVERFLOW_KHR 0x0503 +#define GL_STACK_UNDERFLOW_KHR 0x0504 +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#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 +#endif + +/*------------------------------------------------------------------------* + * AMD extension tokens + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_3DC_X_AMD 0x87F9 +#define GL_3DC_XY_AMD 0x87FA +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#endif + +/* GL_AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#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 +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_Z400_BINARY_AMD 0x8740 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 +#endif + +/* GL_ANGLE_instanced_arrays */ +#ifndef GL_ANGLE_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_PROGRAM_BINARY_ANGLE 0x93A6 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 +#endif + +/* GL_ANGLE_translated_shader_source */ +#ifndef GL_ANGLE_translated_shader_source +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 +#endif + +/*------------------------------------------------------------------------* + * APPLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +/* No new tokens introduced by this extension. */ + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 +#define GL_MAX_SAMPLES_APPLE 0x8D57 +#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync + +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D +#endif + +/*------------------------------------------------------------------------* + * ARM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 +#endif + +/* GL_ARM_rgba8 */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * EXT extension tokens + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_RGBA16F_EXT 0x881A +#define GL_RGB16F_EXT 0x881B +#define GL_RG16F_EXT 0x822F +#define GL_R16F_EXT 0x822D +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#endif + +/* GL_EXT_debug_marker */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_COLOR_EXT 0x1800 +#define GL_DEPTH_EXT 0x1801 +#define GL_STENCIL_EXT 0x1802 +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_QUERY_COUNTER_BITS_EXT 0x8864 +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_TIMESTAMP_EXT 0x8E28 +#define GL_GPU_DISJOINT_EXT 0x8FBB +#endif + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 +#define GL_DRAW_BUFFER0_EXT 0x8825 +#define GL_DRAW_BUFFER1_EXT 0x8826 +#define GL_DRAW_BUFFER2_EXT 0x8827 +#define GL_DRAW_BUFFER3_EXT 0x8828 +#define GL_DRAW_BUFFER4_EXT 0x8829 +#define GL_DRAW_BUFFER5_EXT 0x882A +#define GL_DRAW_BUFFER6_EXT 0x882B +#define GL_DRAW_BUFFER7_EXT 0x882C +#define GL_DRAW_BUFFER8_EXT 0x882D +#define GL_DRAW_BUFFER9_EXT 0x882E +#define GL_DRAW_BUFFER10_EXT 0x882F +#define GL_DRAW_BUFFER11_EXT 0x8830 +#define GL_DRAW_BUFFER12_EXT 0x8831 +#define GL_DRAW_BUFFER13_EXT 0x8832 +#define GL_DRAW_BUFFER14_EXT 0x8833 +#define GL_DRAW_BUFFER15_EXT 0x8834 +#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 +#endif + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C +/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 +#endif + +/* GL_EXT_multi_draw_arrays */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_BGRA_EXT 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +/* reuse GL_NO_ERROR */ +#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 +#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 +#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 +#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 +#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 +#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE_EXT 0x8258 +#define GL_ACTIVE_PROGRAM_EXT 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#endif + +/* GL_EXT_shader_texture_lod */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 +#endif + +/* GL_EXT_sRGB_write_control */ +#ifndef GL_EXT_sRGB_write_control +#define GL_EXT_sRGB_write_control 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_RED_EXT 0x1903 +#define GL_RG_EXT 0x8227 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#endif + +/* 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 +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_ALPHA8_EXT 0x803C +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGB32F_EXT 0x8815 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +/* reuse GL_RGBA16F_EXT */ +/* reuse GL_RGB16F_EXT */ +#define GL_ALPHA16F_EXT 0x881C +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGB10_EXT 0x8052 +#define GL_BGRA8_EXT 0x93A1 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#define GL_R32F_EXT 0x822E +#define GL_RG32F_EXT 0x8230 +#define GL_R16F_EXT 0x822D +#define GL_RG16F_EXT 0x822F +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 +#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 +#endif + +/*------------------------------------------------------------------------* + * DMP extension tokens + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_SHADER_BINARY_DMP 0x9250 +#endif + +/*------------------------------------------------------------------------* + * FJ extension tokens + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 +#endif + +/*------------------------------------------------------------------------* + * IMG extension tokens + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_BGRA_IMG 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_SGX_BINARY_IMG 0x8C0A +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#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 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#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 +#endif + +/*------------------------------------------------------------------------* + * NV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#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_COVERAGE_BUFFER_BIT_NV 0x00008000 +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF +#endif + +/* GL_NV_draw_instanced */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */ +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_READ_FRAMEBUFFER_NV 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 +#define GL_MAX_SAMPLES_NV 0x8D57 +#endif + +/* GL_NV_generate_mipmap_sRGB */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_READ_BUFFER_NV 0x0C02 +#endif + +/* GL_NV_read_buffer_front */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_SLUMINANCE_NV 0x8C46 +#define GL_SLUMINANCE_ALPHA_NV 0x8C44 +#define GL_SRGB8_NV 0x8C41 +#define GL_SLUMINANCE8_NV 0x8C47 +#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F +#define GL_ETC1_SRGB8_NV 0x88EE +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_CLAMP_TO_BORDER_NV 0x812D +#endif + +/* GL_NV_texture_compression_s3tc_update */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_texture_npot_2D_mipmap */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * QCOM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#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 +#endif + +/* GL_QCOM_driver_control */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#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 +#endif + +/* GL_QCOM_extended_get2 */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 +#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 +#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 +#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 +#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 +#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 +#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 +#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 +#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 +#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 +#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 +#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 +#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 +#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 +#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 +#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 +#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 +#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 +#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 +#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 +#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 +#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 +#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 +#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 +#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 +#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 +#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 +#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 +#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 +#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 +#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 +#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_SHADER_BINARY_VIV 0x8FC4 +#endif + +/*------------------------------------------------------------------------* + * End of extension tokens, start of corresponding extension functions + *------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------* + * OES extension functions + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_OES_compressed_ETC1_RGB8_texture 1 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_OES_depth24 1 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_OES_depth32 1 +#endif + +/* GL_OES_depth_texture */ +#ifndef GL_OES_depth_texture +#define GL_OES_depth_texture 1 +#endif + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); +#endif +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +#define GL_OES_EGL_image_external 1 +/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_OES_element_index_uint 1 +#endif + +/* GL_OES_fbo_render_mipmap */ +#ifndef GL_OES_fbo_render_mipmap +#define GL_OES_fbo_render_mipmap 1 +#endif + +/* GL_OES_fragment_precision_high */ +#ifndef GL_OES_fragment_precision_high +#define GL_OES_fragment_precision_high 1 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_OES_get_program_binary 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif +typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_OES_mapbuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); +GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); +GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid **params); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); +typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid **params); +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_OES_packed_depth_stencil 1 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_OES_required_internalformat 1 +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_OES_rgb8_rgba8 1 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_OES_standard_derivatives 1 +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_OES_stencil1 1 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_OES_stencil4 1 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_OES_surfaceless_context 1 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_OES_texture_3D 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif +typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (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 (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (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 (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif + +/* GL_OES_texture_float */ +#ifndef GL_OES_texture_float +#define GL_OES_texture_float 1 +#endif + +/* GL_OES_texture_float_linear */ +#ifndef GL_OES_texture_float_linear +#define GL_OES_texture_float_linear 1 +#endif + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_OES_texture_half_float 1 +#endif + +/* GL_OES_texture_half_float_linear */ +#ifndef GL_OES_texture_half_float_linear +#define GL_OES_texture_half_float_linear 1 +#endif + +/* GL_OES_texture_npot */ +#ifndef GL_OES_texture_npot +#define GL_OES_texture_npot 1 +#endif + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_OES_vertex_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); +GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); +GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); +GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); +#endif +typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); +typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); +typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); +#endif + +/* GL_OES_vertex_half_float */ +#ifndef GL_OES_vertex_half_float +#define GL_OES_vertex_half_float 1 +#endif + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_OES_vertex_type_10_10_10_2 1 +#endif + +/*------------------------------------------------------------------------* + * KHR extension functions + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); +GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); +GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); +typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); +typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, GLvoid **params); +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif + + +/*------------------------------------------------------------------------* + * AMD extension functions + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_AMD_compressed_3DC_texture 1 +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_AMD_compressed_ATC_texture 1 +#endif + +/* AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_AMD_program_binary_Z400 1 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_ANGLE_depth_texture 1 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_ANGLE_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_ANGLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +#ifndef GL_ANGLE_instanced_arrays +#define GL_ANGLE_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_ANGLE_pack_reverse_row_order 1 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_ANGLE_program_binary 1 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_ANGLE_texture_compression_dxt3 1 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_ANGLE_texture_compression_dxt5 1 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_ANGLE_texture_usage 1 +#endif + +#ifndef GL_ANGLE_translated_shader_source +#define GL_ANGLE_translated_shader_source 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif +typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif + +/*------------------------------------------------------------------------* + * APPLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +#ifndef GL_APPLE_copy_texture_levels +#define GL_APPLE_copy_texture_levels 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif +typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_APPLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync +#define GL_APPLE_sync 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); +GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); +GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); +GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif +typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); +typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); +typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_APPLE_texture_format_BGRA8888 1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_APPLE_texture_max_level 1 +#endif + +/*------------------------------------------------------------------------* + * ARM extension functions + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_ARM_mali_program_binary 1 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_ARM_mali_shader_binary 1 +#endif + +/* GL_ARM_rgba8 */ +#ifndef GL_ARM_rgba8 +#define GL_ARM_rgba8 1 +#endif + +/*------------------------------------------------------------------------* + * EXT extension functions + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_EXT_color_buffer_half_float 1 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif + +/* GL_EXT_debug_marker */ +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); +#endif +typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#endif + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_EXT_discard_framebuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif +typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_EXT_disjoint_timer_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); +GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); +GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); +GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); +GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); +GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); +GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); +typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); +typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); +typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); +typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#endif /* GL_EXT_disjoint_timer_query */ + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); +#endif /* GL_EXT_draw_buffers */ + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_EXT_map_buffer_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_EXT_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_EXT_multiview_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); +GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); +GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); +typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); +#endif + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_EXT_occlusion_query_boolean 1 +/* All entry points also exist in GL_EXT_disjoint_timer_query */ +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_EXT_read_format_bgra 1 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +#define GL_EXT_robustness 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); +GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif +typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); +typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); +GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); +GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); +GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); +GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); +GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); +GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif +typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); +typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); +typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); +typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_EXT_shader_framebuffer_fetch 1 +#endif + +/* GL_EXT_shader_texture_lod */ +#ifndef GL_EXT_shader_texture_lod +#define GL_EXT_shader_texture_lod 1 +#endif + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_EXT_shadow_samplers 1 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_EXT_sRGB 1 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_EXT_texture_compression_dxt1 1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_EXT_texture_format_BGRA8888 1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_EXT_texture_rg 1 +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_EXT_texture_storage 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_EXT_texture_type_2_10_10_10_REV 1 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_EXT_unpack_subimage 1 +#endif + +/*------------------------------------------------------------------------* + * DMP extension functions + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_DMP_shader_binary 1 +#endif + +/*------------------------------------------------------------------------* + * FJ extension functions + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_FJ_shader_binary_GCCSO 1 +#endif + +/*------------------------------------------------------------------------* + * IMG extension functions + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_IMG_program_binary 1 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_IMG_read_format 1 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_IMG_shader_binary 1 +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_IMG_texture_compression_pvrtc 1 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_IMG_texture_compression_pvrtc2 1 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_IMG_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/*------------------------------------------------------------------------* + * NV extension functions + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#define GL_NV_coverage_sample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); +GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); +#endif +typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); +typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_NV_depth_nonlinear 1 +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_NV_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); +#endif + +/* GL_NV_draw_instanced */ +#ifndef GL_NV_draw_instanced +#define GL_NV_draw_instanced 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_NV_fbo_color_attachments 1 +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); +GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_NV_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_NV_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +/* GL_NV_generate_mipmap_sRGB */ +#ifndef GL_NV_generate_mipmap_sRGB +#define GL_NV_generate_mipmap_sRGB 1 +#endif + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_NV_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_NV_read_buffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); +#endif + +/* GL_NV_read_buffer_front */ +#ifndef GL_NV_read_buffer_front +#define GL_NV_read_buffer_front 1 +#endif + +/* GL_NV_read_depth */ +#ifndef GL_NV_read_depth +#define GL_NV_read_depth 1 +#endif + +/* GL_NV_read_depth_stencil */ +#ifndef GL_NV_read_depth_stencil +#define GL_NV_read_depth_stencil 1 +#endif + +/* GL_NV_read_stencil */ +#ifndef GL_NV_read_stencil +#define GL_NV_read_stencil 1 +#endif + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_NV_shadow_samplers_array 1 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_NV_shadow_samplers_cube 1 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_NV_sRGB_formats 1 +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_NV_texture_border_clamp 1 +#endif + +/* GL_NV_texture_compression_s3tc_update */ +#ifndef GL_NV_texture_compression_s3tc_update +#define GL_NV_texture_compression_s3tc_update 1 +#endif + +/* GL_NV_texture_npot_2D_mipmap */ +#ifndef GL_NV_texture_npot_2D_mipmap +#define GL_NV_texture_npot_2D_mipmap 1 +#endif + +/*------------------------------------------------------------------------* + * QCOM extension functions + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_QCOM_alpha_test 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); +#endif +typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#define GL_QCOM_binning_control 1 +#endif + +/* GL_QCOM_driver_control */ +#ifndef GL_QCOM_driver_control +#define GL_QCOM_driver_control 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); +GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); +GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); +#endif +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +#endif + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#define GL_QCOM_extended_get 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); +GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); +#endif + +/* GL_QCOM_extended_get2 */ +#ifndef GL_QCOM_extended_get2 +#define GL_QCOM_extended_get2 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); +GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); +GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_QCOM_perfmon_global_mode 1 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_QCOM_writeonly_rendering 1 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_QCOM_tiled_rendering 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); +#endif +typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_VIV_shader_binary 1 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2ext_h_ */ diff --git a/code/SDL2/include/SDL_opengles2_gl2platform.h b/code/SDL2/include/SDL_opengles2_gl2platform.h new file mode 100644 index 00000000..c325686f --- /dev/null +++ b/code/SDL2/include/SDL_opengles2_gl2platform.h @@ -0,0 +1,30 @@ +#ifndef __gl2platform_h_ +#define __gl2platform_h_ + +/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h + * + * Adopters may modify khrplatform.h and this file to suit their platform. + * You are encouraged to submit all 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 "OpenGL-ES" component "Registry". + */ + +/*#include */ + +#ifndef GL_APICALL +#define GL_APICALL KHRONOS_APICALL +#endif + +#ifndef GL_APIENTRY +#define GL_APIENTRY KHRONOS_APIENTRY +#endif + +#endif /* __gl2platform_h_ */ diff --git a/code/SDL2/include/SDL_opengles2_khrplatform.h b/code/SDL2/include/SDL_opengles2_khrplatform.h new file mode 100644 index 00000000..c9e6f17d --- /dev/null +++ b/code/SDL2/include/SDL_opengles2_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/code/SDL2/include/SDL_pixels.h b/code/SDL2/include/SDL_pixels.h index 3131af7b..8499c328 100644 --- a/code/SDL2/include/SDL_pixels.h +++ b/code/SDL2/include/SDL_pixels.h @@ -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 @@ -86,6 +86,8 @@ enum }; /** Array component order, low byte -> high byte. */ +/* !!! FIXME: in 2.1, make these not overlap differently with + !!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ enum { SDL_ARRAYORDER_NONE, @@ -134,12 +136,31 @@ enum (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) -#define SDL_ISPIXELFORMAT_ALPHA(format) \ +#define SDL_ISPIXELFORMAT_PACKED(format) \ (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) + +#define SDL_ISPIXELFORMAT_ARRAY(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) + +#define SDL_ISPIXELFORMAT_ALPHA(format) \ + ((SDL_ISPIXELFORMAT_PACKED(format) && \ ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ - (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ + (SDL_ISPIXELFORMAT_ARRAY(format) && \ + ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) /* The flag is set to 1 because 0x1? is not in the printable ASCII range */ #define SDL_ISPIXELFORMAT_FOURCC(format) \ @@ -248,7 +269,11 @@ enum SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ - SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U') + SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), + SDL_PIXELFORMAT_NV12 = /**< Planar mode: Y + U/V interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), + SDL_PIXELFORMAT_NV21 = /**< Planar mode: Y + V/U interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1') }; typedef struct SDL_Color diff --git a/code/SDL2/include/SDL_platform.h b/code/SDL2/include/SDL_platform.h index dbe71a70..c6c21398 100644 --- a/code/SDL2/include/SDL_platform.h +++ b/code/SDL2/include/SDL_platform.h @@ -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 @@ -56,7 +56,7 @@ #undef __IRIX__ #define __IRIX__ 1 #endif -#if defined(linux) || defined(__linux) || defined(__linux__) +#if (defined(linux) || defined(__linux) || defined(__linux__)) #undef __LINUX__ #define __LINUX__ 1 #endif @@ -109,15 +109,15 @@ #undef __RISCOS__ #define __RISCOS__ 1 #endif -#if defined(__SVR4) +#if defined(__sun) && defined(__SVR4) #undef __SOLARIS__ #define __SOLARIS__ 1 #endif -#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) +#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) /* Try to find out if we're compiling for WinRT or non-WinRT */ /* If _USING_V110_SDK71_ is defined it means we are using the v110_xp or v120_xp toolset. */ -#if defined(_MSC_VER) && (_MSC_VER >= 1700) && !(_USING_V110_SDK71_) /* _MSC_VER==1700 for MSVC 2012 */ +#if (defined(_MSC_VER) && (_MSC_VER >= 1700) && !_USING_V110_SDK71_) /* _MSC_VER==1700 for MSVC 2012 */ #include #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #undef __WINDOWS__ @@ -142,6 +142,23 @@ #define __PSP__ 1 #endif +/* The NACL compiler defines __native_client__ and __pnacl__ + * Ref: http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi + */ +#if defined(__native_client__) +#undef __LINUX__ +#undef __NACL__ +#define __NACL__ 1 +#endif +#if defined(__pnacl__) +#undef __LINUX__ +#undef __PNACL__ +#define __PNACL__ 1 +/* PNACL with newlib supports static linking only */ +#define __SDL_NOGETPROCADDR__ +#endif + + #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus diff --git a/code/SDL2/include/SDL_power.h b/code/SDL2/include/SDL_power.h index cf71c982..24c05011 100644 --- a/code/SDL2/include/SDL_power.h +++ b/code/SDL2/include/SDL_power.h @@ -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/code/SDL2/include/SDL_quit.h b/code/SDL2/include/SDL_quit.h index 8a786445..cc06f28d 100644 --- a/code/SDL2/include/SDL_quit.h +++ b/code/SDL2/include/SDL_quit.h @@ -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/code/SDL2/include/SDL_rect.h b/code/SDL2/include/SDL_rect.h index 0a95a334..bbcb9a3b 100644 --- a/code/SDL2/include/SDL_rect.h +++ b/code/SDL2/include/SDL_rect.h @@ -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 @@ -43,6 +43,7 @@ extern "C" { * \brief The structure that defines a point * * \sa SDL_EnclosePoints + * \sa SDL_PointInRect */ typedef struct SDL_Point { @@ -66,6 +67,15 @@ typedef struct SDL_Rect int w, h; } SDL_Rect; +/** + * \brief Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_Rect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + /** * \brief Returns true if the rectangle has no area. */ diff --git a/code/SDL2/include/SDL_render.h b/code/SDL2/include/SDL_render.h index 77f706a9..e4ed2af6 100644 --- a/code/SDL2/include/SDL_render.h +++ b/code/SDL2/include/SDL_render.h @@ -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 @@ -81,8 +81,8 @@ typedef struct SDL_RendererInfo Uint32 flags; /**< Supported ::SDL_RendererFlags */ Uint32 num_texture_formats; /**< The number of available texture formats */ Uint32 texture_formats[16]; /**< The available texture formats */ - int max_texture_width; /**< The maximimum texture width */ - int max_texture_height; /**< The maximimum texture height */ + int max_texture_width; /**< The maximum texture width */ + int max_texture_height; /**< The maximum texture height */ } SDL_RendererInfo; /** @@ -215,7 +215,7 @@ extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, SDL_RendererInfo * info); /** - * \brief Get the output size of a rendering context. + * \brief Get the output size in pixels of a rendering context. */ extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, int *w, int *h); @@ -229,7 +229,7 @@ extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, * \param w The width of the texture in pixels. * \param h The height of the texture in pixels. * - * \return The created texture is returned, or 0 if no rendering context was + * \return The created texture is returned, or NULL if no rendering context was * active, the format was unsupported, or the width or height were out * of range. * @@ -248,7 +248,7 @@ extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, * \param renderer The renderer. * \param surface The surface containing pixel data used to fill the texture. * - * \return The created texture is returned, or 0 on error. + * \return The created texture is returned, or NULL on error. * * \note The surface is not modified or freed by this function. * @@ -371,7 +371,7 @@ extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, * \param rect A pointer to the rectangle of pixels to update, or NULL to * update the entire texture. * \param pixels The raw pixel data. - * \param pitch The number of bytes between rows of pixel data. + * \param pitch The number of bytes in a row of pixel data, including padding between lines. * * \return 0 on success, or -1 if the texture is not valid. * @@ -551,6 +551,16 @@ extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, SDL_Rect * rect); +/** + * \brief Get whether clipping is enabled on the given renderer. + * + * \param renderer The renderer from which clip state should be queried. + * + * \sa SDL_RenderGetClipRect() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer); + + /** * \brief Set the drawing scale for rendering on the current target. * @@ -782,7 +792,7 @@ extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, * \param dstrect A pointer to the destination rectangle, or NULL for the * entire rendering target. * \param angle An angle in degrees that indicates the rotation that will be applied to dstrect - * \param center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done aroud dstrect.w/2, dstrect.h/2) + * \param center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w/2, dstrect.h/2). * \param flip An SDL_RendererFlip value stating which flipping actions should be performed on the texture * * \return 0 on success, or -1 on error diff --git a/code/SDL2/include/SDL_revision.h b/code/SDL2/include/SDL_revision.h index a75dc330..6d7163d4 100644 --- a/code/SDL2/include/SDL_revision.h +++ b/code/SDL2/include/SDL_revision.h @@ -1,2 +1,2 @@ -#define SDL_REVISION "hg-8628:b558f99d48f0" -#define SDL_REVISION_NUMBER 8628 +#define SDL_REVISION "hg-10001:e12c38730512" +#define SDL_REVISION_NUMBER 10001 diff --git a/code/SDL2/include/SDL_rwops.h b/code/SDL2/include/SDL_rwops.h index 4bdd7876..f460ae7d 100644 --- a/code/SDL2/include/SDL_rwops.h +++ b/code/SDL2/include/SDL_rwops.h @@ -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 @@ -93,7 +93,7 @@ typedef struct SDL_RWops Uint32 type; union { -#if defined(ANDROID) +#if defined(__ANDROID__) struct { void *fileNameRef; @@ -220,7 +220,6 @@ extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); /* @} *//* Write endian functions */ - /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/code/SDL2/include/SDL_scancode.h b/code/SDL2/include/SDL_scancode.h index 4b3be28f..0af1dd59 100644 --- a/code/SDL2/include/SDL_scancode.h +++ b/code/SDL2/include/SDL_scancode.h @@ -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/code/SDL2/include/SDL_shape.h b/code/SDL2/include/SDL_shape.h index 53029306..db10a8f0 100644 --- a/code/SDL2/include/SDL_shape.h +++ b/code/SDL2/include/SDL_shape.h @@ -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/code/SDL2/include/SDL_stdinc.h b/code/SDL2/include/SDL_stdinc.h index 31b343d3..887bcd2d 100644 --- a/code/SDL2/include/SDL_stdinc.h +++ b/code/SDL2/include/SDL_stdinc.h @@ -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 @@ -165,6 +165,97 @@ typedef uint64_t Uint64; /* @} *//* Basic data types */ +/* Make sure we have macros for printing 64 bit values. + * should define these but this is not true all platforms. + * (for example win32) */ +#ifndef SDL_PRIs64 +#ifdef PRIs64 +#define SDL_PRIs64 PRIs64 +#elif defined(__WIN32__) +#define SDL_PRIs64 "I64d" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIs64 "ld" +#else +#define SDL_PRIs64 "lld" +#endif +#endif +#ifndef SDL_PRIu64 +#ifdef PRIu64 +#define SDL_PRIu64 PRIu64 +#elif defined(__WIN32__) +#define SDL_PRIu64 "I64u" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIu64 "lu" +#else +#define SDL_PRIu64 "llu" +#endif +#endif +#ifndef SDL_PRIx64 +#ifdef PRIx64 +#define SDL_PRIx64 PRIx64 +#elif defined(__WIN32__) +#define SDL_PRIx64 "I64x" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIx64 "lx" +#else +#define SDL_PRIx64 "llx" +#endif +#endif +#ifndef SDL_PRIX64 +#ifdef PRIX64 +#define SDL_PRIX64 PRIX64 +#elif defined(__WIN32__) +#define SDL_PRIX64 "I64X" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIX64 "lX" +#else +#define SDL_PRIX64 "llX" +#endif +#endif + +/* Annotations to help code analysis tools */ +#ifdef SDL_DISABLE_ANALYZE_MACROS +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#else +#if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ +#include + +#define SDL_IN_BYTECAP(x) _In_bytecount_(x) +#define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) +#define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) +#define SDL_OUT_CAP(x) _Out_cap_(x) +#define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) +#define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) + +#define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ +#define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ +#else +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#endif +#if defined(__GNUC__) +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) +#else +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#endif +#endif /* SDL_DISABLE_ANALYZE_MACROS */ #define SDL_COMPILE_TIME_ASSERT(name, x) \ typedef int SDL_dummy_ ## name[(x) * 2 - 1] @@ -259,7 +350,7 @@ extern DECLSPEC int SDLCALL SDL_isspace(int x); extern DECLSPEC int SDLCALL SDL_toupper(int x); extern DECLSPEC int SDLCALL SDL_tolower(int x); -extern DECLSPEC void *SDLCALL SDL_memset(void *dst, int c, size_t len); +extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) @@ -294,24 +385,19 @@ SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) } -extern DECLSPEC void *SDLCALL SDL_memcpy(void *dst, const void *src, size_t len); +extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); -SDL_FORCE_INLINE void *SDL_memcpy4(void *dst, const void *src, size_t dwords) -{ - return SDL_memcpy(dst, src, dwords * 4); -} - -extern DECLSPEC void *SDLCALL SDL_memmove(void *dst, const void *src, size_t len); +extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); -extern DECLSPEC size_t SDLCALL SDL_wcslcpy(wchar_t *dst, const wchar_t *src, size_t maxlen); -extern DECLSPEC size_t SDLCALL SDL_wcslcat(wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); -extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen); -extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(char *dst, const char *src, size_t dst_bytes); -extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); +extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); extern DECLSPEC char *SDLCALL SDL_strrev(char *str); extern DECLSPEC char *SDLCALL SDL_strupr(char *str); @@ -340,10 +426,10 @@ extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); -extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...); +extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap); -extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...); -extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); +extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); +extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap); #ifndef HAVE_M_PI #ifndef M_PI @@ -367,6 +453,9 @@ extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); extern DECLSPEC double SDLCALL SDL_sin(double x); extern DECLSPEC float SDLCALL SDL_sinf(float x); extern DECLSPEC double SDLCALL SDL_sqrt(double x); +extern DECLSPEC float SDLCALL SDL_sqrtf(float x); +extern DECLSPEC double SDLCALL SDL_tan(double x); +extern DECLSPEC float SDLCALL SDL_tanf(float x); /* The SDL implementation of iconv() returns these error codes */ #define SDL_ICONV_ERROR (size_t)-1 @@ -394,6 +483,39 @@ extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +/* force builds using Clang's static analysis tools to use literal C runtime + here, since there are possibly tests that are ineffective otherwise. */ +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) +#define SDL_malloc malloc +#define SDL_calloc calloc +#define SDL_realloc realloc +#define SDL_free free +#define SDL_memset memset +#define SDL_memcpy memcpy +#define SDL_memmove memmove +#define SDL_memcmp memcmp +#define SDL_strlen strlen +#define SDL_strlcpy strlcpy +#define SDL_strlcat strlcat +#define SDL_strdup strdup +#define SDL_strchr strchr +#define SDL_strrchr strrchr +#define SDL_strstr strstr +#define SDL_strcmp strcmp +#define SDL_strncmp strncmp +#define SDL_strcasecmp strcasecmp +#define SDL_strncasecmp strncasecmp +#define SDL_sscanf sscanf +#define SDL_vsscanf vsscanf +#define SDL_snprintf snprintf +#define SDL_vsnprintf vsnprintf +#endif + +SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) +{ + return SDL_memcpy(dst, src, dwords * 4); +} + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/code/SDL2/include/SDL_surface.h b/code/SDL2/include/SDL_surface.h index aa8d8217..e63ca890 100644 --- a/code/SDL2/include/SDL_surface.h +++ b/code/SDL2/include/SDL_surface.h @@ -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/code/SDL2/include/SDL_system.h b/code/SDL2/include/SDL_system.h index fd929f7f..5da9adb4 100644 --- a/code/SDL2/include/SDL_system.h +++ b/code/SDL2/include/SDL_system.h @@ -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 @@ -42,24 +42,36 @@ extern "C" { /* Platform specific functions for Windows */ #ifdef __WIN32__ + +/** + \brief Set a function that is called for every windows message, before TranslateMessage() +*/ +typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam); +extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata); + +/** + \brief Returns the D3D9 adapter index that matches the specified display index. -/* Returns the D3D9 adapter index that matches the specified display index. This adapter index can be passed to IDirect3D9::CreateDevice and controls on which monitor a full screen application will appear. */ extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); -/* Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer. +typedef struct IDirect3DDevice9 IDirect3DDevice9; +/** + \brief Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer. + Once you are done using the device, you should release it to avoid a resource leak. */ -typedef struct IDirect3DDevice9 IDirect3DDevice9; extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); -/* Returns the DXGI Adapter and Output indices for the specified display index. +/** + \brief Returns the DXGI Adapter and Output indices for the specified display index. + These can be passed to EnumAdapters and EnumOutputs respectively to get the objects required to create a DX10 or DX11 device and swap chain. */ -extern DECLSPEC void SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); +extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); #endif /* __WIN32__ */ @@ -67,7 +79,10 @@ extern DECLSPEC void SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapt /* Platform specific functions for iOS */ #if defined(__IPHONEOS__) && __IPHONEOS__ +#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); + +#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); #endif /* __IPHONEOS__ */ @@ -76,12 +91,16 @@ extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); /* Platform specific functions for Android */ #if defined(__ANDROID__) && __ANDROID__ -/* Get the JNI environment for the current thread +/** + \brief Get the JNI environment for the current thread + This returns JNIEnv*, but the prototype is void* so we don't need jni.h */ extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(); -/* Get the SDL Activity object for the application +/** + \brief Get the SDL Activity object for the application + This returns jobject, but the prototype is void* so we don't need jni.h The jobject returned by SDL_AndroidGetActivity is a local reference. It is the caller's responsibility to properly release it @@ -89,26 +108,33 @@ extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(); */ extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(); -/* See the official Android developer guide for more information: +/** + See the official Android developer guide for more information: http://developer.android.com/guide/topics/data/data-storage.html */ #define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 #define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 -/* Get the path used for internal storage for this application. +/** + \brief Get the path used for internal storage for this application. + This path is unique to your application and cannot be written to by other applications. */ extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(); -/* Get the current state of external storage, a bitmask of these values: +/** + \brief Get the current state of external storage, a bitmask of these values: SDL_ANDROID_EXTERNAL_STORAGE_READ SDL_ANDROID_EXTERNAL_STORAGE_WRITE + If external storage is currently unavailable, this will return 0. */ extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(); -/* Get the path used for external storage for this application. +/** + \brief Get the path used for external storage for this application. + This path is unique to your application, but is public and can be written to by other applications. */ @@ -151,7 +177,7 @@ typedef enum * http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx * * \param pathType The type of path to retrieve. - * \ret A UCS-2 string (16-bit, wide-char) containing the path, or NULL + * \return A UCS-2 string (16-bit, wide-char) containing the path, or NULL * if the path is not available for any reason. Not all paths are * available on all versions of Windows. This is especially true on * Windows Phone. Check the documentation for the given @@ -168,7 +194,7 @@ extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path * http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx * * \param pathType The type of path to retrieve. - * \ret A UTF-8 string (8-bit, multi-byte) containing the path, or NULL + * \return A UTF-8 string (8-bit, multi-byte) containing the path, or NULL * if the path is not available for any reason. Not all paths are * available on all versions of Windows. This is especially true on * Windows Phone. Check the documentation for the given @@ -179,7 +205,6 @@ extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathT #endif /* __WINRT__ */ - /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/code/SDL2/include/SDL_syswm.h b/code/SDL2/include/SDL_syswm.h index a3fe7386..1056e526 100644 --- a/code/SDL2/include/SDL_syswm.h +++ b/code/SDL2/include/SDL_syswm.h @@ -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 @@ -52,7 +52,9 @@ struct SDL_SysWMinfo; #else #if defined(SDL_VIDEO_DRIVER_WINDOWS) +#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN +#endif #include #endif @@ -83,7 +85,7 @@ struct SDL_SysWMinfo; #if defined(SDL_VIDEO_DRIVER_COCOA) #ifdef __OBJC__ -#include +@class NSWindow; #else typedef struct _NSWindow NSWindow; #endif @@ -96,13 +98,14 @@ typedef struct _NSWindow NSWindow; typedef struct _UIWindow UIWindow; typedef struct _UIViewController UIViewController; #endif +typedef Uint32 GLuint; #endif -#if defined(SDL_VIDEO_DRIVER_MIR) -#include +#if defined(SDL_VIDEO_DRIVER_ANDROID) +typedef struct ANativeWindow ANativeWindow; +typedef void *EGLSurface; #endif - /** * These are the various supported windowing subsystems */ @@ -117,6 +120,7 @@ typedef enum SDL_SYSWM_WAYLAND, SDL_SYSWM_MIR, SDL_SYSWM_WINRT, + SDL_SYSWM_ANDROID } SDL_SYSWM_TYPE; /** @@ -149,12 +153,17 @@ struct SDL_SysWMmsg #if defined(SDL_VIDEO_DRIVER_COCOA) struct { + /* Latest version of Xcode clang complains about empty structs in C v. C++: + error: empty struct has size 0 in C, size 1 in C++ + */ + int dummy; /* No Cocoa window events yet */ } cocoa; #endif #if defined(SDL_VIDEO_DRIVER_UIKIT) struct { + int dummy; /* No UIKit window events yet */ } uikit; #endif @@ -179,6 +188,7 @@ struct SDL_SysWMinfo struct { HWND window; /**< The window handle */ + HDC hdc; /**< The window device context */ } win; #endif #if defined(SDL_VIDEO_DRIVER_WINRT) @@ -205,13 +215,24 @@ struct SDL_SysWMinfo #if defined(SDL_VIDEO_DRIVER_COCOA) struct { - NSWindow *window; /* The Cocoa window */ +#if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc) + NSWindow __unsafe_unretained *window; /* The Cocoa window */ +#else + NSWindow *window; /* The Cocoa window */ +#endif } cocoa; #endif #if defined(SDL_VIDEO_DRIVER_UIKIT) struct { - UIWindow *window; /* The UIKit window */ +#if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc) + UIWindow __unsafe_unretained *window; /* The UIKit window */ +#else + UIWindow *window; /* The UIKit window */ +#endif + GLuint framebuffer; /* The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ + GLuint colorbuffer; /* The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ + GLuint resolveFramebuffer; /* The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ } uikit; #endif #if defined(SDL_VIDEO_DRIVER_WAYLAND) @@ -225,11 +246,19 @@ struct SDL_SysWMinfo #if defined(SDL_VIDEO_DRIVER_MIR) struct { - MirConnection *connection; /**< Mir display server connection */ - MirSurface *surface; /**< Mir surface */ + struct MirConnection *connection; /**< Mir display server connection */ + struct MirSurface *surface; /**< Mir surface */ } mir; #endif +#if defined(SDL_VIDEO_DRIVER_ANDROID) + struct + { + ANativeWindow *window; + EGLSurface surface; + } android; +#endif + /* Can't have an empty union */ int dummy; } info; diff --git a/code/SDL2/include/SDL_test.h b/code/SDL2/include/SDL_test.h index ae649a42..217847bf 100644 --- a/code/SDL2/include/SDL_test.h +++ b/code/SDL2/include/SDL_test.h @@ -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 @@ -52,7 +52,7 @@ extern "C" { /* Global definitions */ /* - * Note: Maximum size of SDLTest log message is less than SDLs limit + * Note: Maximum size of SDLTest log message is less than SDL's limit * to ensure we can fit additional information such as the timestamp. */ #define SDLTEST_MAX_LOGMESSAGE_LENGTH 3584 diff --git a/code/SDL2/include/SDL_test_assert.h b/code/SDL2/include/SDL_test_assert.h index 79c84d60..29277e12 100644 --- a/code/SDL2/include/SDL_test_assert.h +++ b/code/SDL2/include/SDL_test_assert.h @@ -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 @@ -58,7 +58,7 @@ extern "C" { * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). * \param assertDescription Message to log with the assert describing it. */ -void SDLTest_Assert(int assertCondition, const char *assertDescription, ...); +void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters. @@ -68,14 +68,14 @@ void SDLTest_Assert(int assertCondition, const char *assertDescription, ...); * * \returns Returns the assertCondition so it can be used to externally to break execution flow if desired. */ -int SDLTest_AssertCheck(int assertCondition, const char *assertDescription, ...); +int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); /** - * \brief Explicitely pass without checking an assertion condition. Updates assertion counter. + * \brief Explicitly pass without checking an assertion condition. Updates assertion counter. * * \param assertDescription Message to log with the assert describing it. */ -void SDLTest_AssertPass(const char *assertDescription, ...); +void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(1); /** * \brief Resets the assert summary counters to zero. diff --git a/code/SDL2/include/SDL_test_common.h b/code/SDL2/include/SDL_test_common.h index 45c9edaf..0ebf31cb 100644 --- a/code/SDL2/include/SDL_test_common.h +++ b/code/SDL2/include/SDL_test_common.h @@ -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/code/SDL2/include/SDL_test_compare.h b/code/SDL2/include/SDL_test_compare.h index f1353a8d..772cf9fb 100644 --- a/code/SDL2/include/SDL_test_compare.h +++ b/code/SDL2/include/SDL_test_compare.h @@ -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 @@ -51,9 +51,9 @@ extern "C" { * * \param surface Surface used in comparison * \param referenceSurface Test Surface used in comparison - * \param allowable_error Allowable difference (squared) in blending accuracy. + * \param allowable_error Allowable difference (=sum of squared difference for each RGB component) in blending accuracy. * - * \returns 0 if comparison succeeded, >0 (=number of pixels where comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. + * \returns 0 if comparison succeeded, >0 (=number of pixels for which the comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. */ int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); diff --git a/code/SDL2/include/SDL_test_crc32.h b/code/SDL2/include/SDL_test_crc32.h index a180fe3b..572a3d95 100644 --- a/code/SDL2/include/SDL_test_crc32.h +++ b/code/SDL2/include/SDL_test_crc32.h @@ -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 @@ -70,27 +70,27 @@ extern "C" { /* ---------- Function Prototypes ------------- */ /** - * /brief Initialize the CRC context + * \brief Initialize the CRC context * * Note: The function initializes the crc table required for all crc calculations. * - * /param crcContext pointer to context variable + * \param crcContext pointer to context variable * - * /returns 0 for OK, -1 on error + * \returns 0 for OK, -1 on error * */ int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext); /** - * /brief calculate a crc32 from a data block + * \brief calculate a crc32 from a data block * - * /param crcContext pointer to context variable - * /param inBuf input buffer to checksum - * /param inLen length of input buffer - * /param crc32 pointer to Uint32 to store the final CRC into + * \param crcContext pointer to context variable + * \param inBuf input buffer to checksum + * \param inLen length of input buffer + * \param crc32 pointer to Uint32 to store the final CRC into * - * /returns 0 for OK, -1 on error + * \returns 0 for OK, -1 on error * */ int SDLTest_crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); @@ -102,11 +102,11 @@ int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, /** - * /brief clean up CRC context + * \brief clean up CRC context * - * /param crcContext pointer to context variable + * \param crcContext pointer to context variable * - * /returns 0 for OK, -1 on error + * \returns 0 for OK, -1 on error * */ diff --git a/code/SDL2/include/SDL_test_font.h b/code/SDL2/include/SDL_test_font.h index 8d51d4a9..3378ea85 100644 --- a/code/SDL2/include/SDL_test_font.h +++ b/code/SDL2/include/SDL_test_font.h @@ -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/code/SDL2/include/SDL_test_fuzzer.h b/code/SDL2/include/SDL_test_fuzzer.h index 64018039..9603652b 100644 --- a/code/SDL2/include/SDL_test_fuzzer.h +++ b/code/SDL2/include/SDL_test_fuzzer.h @@ -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 @@ -57,7 +57,7 @@ extern "C" { /** * Initializes the fuzzer for a test * - * /param execKey Execution "Key" that initializes the random number generator uniquely for the test. + * \param execKey Execution "Key" that initializes the random number generator uniquely for the test. * */ void SDLTest_FuzzerInit(Uint64 execKey); @@ -318,7 +318,7 @@ Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL /** * Returns integer in range [min, max] (inclusive). * Min and max values can be negative values. - * If Max in smaller tham min, then the values are swapped. + * If Max in smaller than min, then the values are swapped. * Min and max are the same value, that value will be returned. * * \param min Minimum inclusive value of returned random number diff --git a/code/SDL2/include/SDL_test_harness.h b/code/SDL2/include/SDL_test_harness.h index 2c1e2ade..74c0950c 100644 --- a/code/SDL2/include/SDL_test_harness.h +++ b/code/SDL2/include/SDL_test_harness.h @@ -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/code/SDL2/include/SDL_test_images.h b/code/SDL2/include/SDL_test_images.h index 05627996..8c64b4fe 100644 --- a/code/SDL2/include/SDL_test_images.h +++ b/code/SDL2/include/SDL_test_images.h @@ -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/code/SDL2/include/SDL_test_log.h b/code/SDL2/include/SDL_test_log.h index 76ce1058..73a5c016 100644 --- a/code/SDL2/include/SDL_test_log.h +++ b/code/SDL2/include/SDL_test_log.h @@ -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 @@ -47,14 +47,14 @@ extern "C" { * * \param fmt Message to be logged */ -void SDLTest_Log(const char *fmt, ...); +void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /** * \brief Prints given message with a timestamp in the TEST category and the ERROR priority. * * \param fmt Message to be logged */ -void SDLTest_LogError(const char *fmt, ...); +void SDLTest_LogError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/code/SDL2/include/SDL_test_md5.h b/code/SDL2/include/SDL_test_md5.h index 029e164b..f2d9a7d7 100644 --- a/code/SDL2/include/SDL_test_md5.h +++ b/code/SDL2/include/SDL_test_md5.h @@ -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 @@ -78,9 +78,9 @@ extern "C" { /* ---------- Function Prototypes ------------- */ /** - * /brief initialize the context + * \brief initialize the context * - * /param mdContext pointer to context variable + * \param mdContext pointer to context variable * * Note: The function initializes the message-digest context * mdContext. Call before each new use of the context - @@ -90,11 +90,11 @@ extern "C" { /** - * /brief update digest from variable length data + * \brief update digest from variable length data * - * /param mdContext pointer to context variable - * /param inBuf pointer to data array/string - * /param inLen length of data array/string + * \param mdContext pointer to context variable + * \param inBuf pointer to data array/string + * \param inLen length of data array/string * * Note: The function updates the message-digest context to account * for the presence of each of the characters inBuf[0..inLen-1] @@ -105,10 +105,10 @@ extern "C" { unsigned int inLen); -/* - * /brief complete digest computation +/** + * \brief complete digest computation * - * /param mdContext pointer to context variable + * \param mdContext pointer to context variable * * Note: The function terminates the message-digest computation and * ends with the desired message digest in mdContext.digest[0..15]. diff --git a/code/SDL2/include/SDL_test_random.h b/code/SDL2/include/SDL_test_random.h index 6c5660d8..91c36526 100644 --- a/code/SDL2/include/SDL_test_random.h +++ b/code/SDL2/include/SDL_test_random.h @@ -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/code/SDL2/include/SDL_thread.h b/code/SDL2/include/SDL_thread.h index 4e48cc34..377e6c73 100644 --- a/code/SDL2/include/SDL_thread.h +++ b/code/SDL2/include/SDL_thread.h @@ -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 @@ -233,9 +233,9 @@ extern DECLSPEC void SDLCALL SDL_DetachThread(SDL_Thread * thread); * if (!thread_local_storage) { * thread_local_storage = SDL_TLSCreate(); * } - * SDL_AtomicUnLock(&tls_lock); + * SDL_AtomicUnlock(&tls_lock); * } - * SDL_TLSSet(thread_local_storage, value); + * SDL_TLSSet(thread_local_storage, value, 0); * } * * void *GetMyThreadData(void) diff --git a/code/SDL2/include/SDL_timer.h b/code/SDL2/include/SDL_timer.h index a48e0466..e0d3785e 100644 --- a/code/SDL2/include/SDL_timer.h +++ b/code/SDL2/include/SDL_timer.h @@ -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 @@ -88,7 +88,7 @@ typedef int SDL_TimerID; /** * \brief Add a new timer to the pool of timers already running. * - * \return A timer ID, or NULL when an error occurs. + * \return A timer ID, or 0 when an error occurs. */ extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, diff --git a/code/SDL2/include/SDL_touch.h b/code/SDL2/include/SDL_touch.h index 017deb28..2643e367 100644 --- a/code/SDL2/include/SDL_touch.h +++ b/code/SDL2/include/SDL_touch.h @@ -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/code/SDL2/include/SDL_types.h b/code/SDL2/include/SDL_types.h index cd3ba33c..5118af21 100644 --- a/code/SDL2/include/SDL_types.h +++ b/code/SDL2/include/SDL_types.h @@ -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/code/SDL2/include/SDL_version.h b/code/SDL2/include/SDL_version.h index d02898bb..de1f1605 100644 --- a/code/SDL2/include/SDL_version.h +++ b/code/SDL2/include/SDL_version.h @@ -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 @@ -59,7 +59,7 @@ typedef struct SDL_version */ #define SDL_MAJOR_VERSION 2 #define SDL_MINOR_VERSION 0 -#define SDL_PATCHLEVEL 3 +#define SDL_PATCHLEVEL 4 /** * \brief Macro to determine SDL version program was compiled against. diff --git a/code/SDL2/include/SDL_video.h b/code/SDL2/include/SDL_video.h index 49ea37ad..52dbbc76 100644 --- a/code/SDL2/include/SDL_video.h +++ b/code/SDL2/include/SDL_video.h @@ -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 @@ -53,8 +53,8 @@ extern "C" { typedef struct { Uint32 format; /**< pixel format */ - int w; /**< width */ - int h; /**< height */ + int w; /**< width, in screen coordinates */ + int h; /**< height, in screen coordinates */ int refresh_rate; /**< refresh rate (or zero for unspecified) */ void *driverdata; /**< driver-specific data, initialize to 0 */ } SDL_DisplayMode; @@ -108,7 +108,8 @@ typedef enum SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ - SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000 /**< window should be created in high-DPI mode if supported */ + SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported */ + SDL_WINDOW_MOUSE_CAPTURE = 0x00004000 /**< window has mouse captured (unrelated to INPUT_GRABBED) */ } SDL_WindowFlags; /** @@ -142,7 +143,9 @@ typedef enum SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 */ SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ - SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as a result of an API call or through the system or user changing the window size. */ + SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as + a result of an API call or through the + system or user changing the window size. */ SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size @@ -188,7 +191,8 @@ typedef enum SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_SHARE_WITH_CURRENT_CONTEXT, - SDL_GL_FRAMEBUFFER_SRGB_CAPABLE + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR } SDL_GLattr; typedef enum @@ -206,6 +210,12 @@ typedef enum SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 } SDL_GLcontextFlag; +typedef enum +{ + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 +} SDL_GLcontextReleaseFlag; + /* Function prototypes */ @@ -288,6 +298,18 @@ extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); */ extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); +/** + * \brief Get the dots/pixels-per-inch for a display + * + * \note Diagonal, horizontal and vertical DPI can all be optionally + * returned if the parameter is non-NULL. + * + * \return 0 on success, or -1 if no DPI information is available or the index is out of range. + * + * \sa SDL_GetNumVideoDisplays() + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi); + /** * \brief Returns the number of available display modes. * @@ -392,8 +414,8 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); * ::SDL_WINDOWPOS_UNDEFINED. * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or * ::SDL_WINDOWPOS_UNDEFINED. - * \param w The width of the window. - * \param h The height of the window. + * \param w The width of the window, in screen coordinates. + * \param h The height of the window, in screen coordinates. * \param flags The flags for the window, a mask of any of the following: * ::SDL_WINDOW_FULLSCREEN, ::SDL_WINDOW_OPENGL, * ::SDL_WINDOW_HIDDEN, ::SDL_WINDOW_BORDERLESS, @@ -403,6 +425,12 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); * * \return The id of the window created, or zero if window creation failed. * + * If the window is created with the SDL_WINDOW_ALLOW_HIGHDPI flag, its size + * in pixels may differ from its size in screen coordinates on platforms with + * high-DPI support (e.g. iOS and Mac OS X). Use SDL_GetWindowSize() to query + * the client area's size in screen coordinates, and SDL_GL_GetDrawableSize() + * or SDL_GetRendererOutputSize() to query the drawable size in pixels. + * * \sa SDL_DestroyWindow() */ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, @@ -493,10 +521,10 @@ extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, * \brief Set the position of a window. * * \param window The window to reposition. - * \param x The x coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or - ::SDL_WINDOWPOS_UNDEFINED. - * \param y The y coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or - ::SDL_WINDOWPOS_UNDEFINED. + * \param x The x coordinate of the window in screen coordinates, or + * ::SDL_WINDOWPOS_CENTERED or ::SDL_WINDOWPOS_UNDEFINED. + * \param y The y coordinate of the window in screen coordinates, or + * ::SDL_WINDOWPOS_CENTERED or ::SDL_WINDOWPOS_UNDEFINED. * * \note The window coordinate origin is the upper left of the display. * @@ -509,8 +537,10 @@ extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, * \brief Get the position of a window. * * \param window The window to query. - * \param x Pointer to variable for storing the x position, may be NULL - * \param y Pointer to variable for storing the y position, may be NULL + * \param x Pointer to variable for storing the x position, in screen + * coordinates. May be NULL. + * \param y Pointer to variable for storing the y position, in screen + * coordinates. May be NULL. * * \sa SDL_SetWindowPosition() */ @@ -521,12 +551,17 @@ extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, * \brief Set the size of a window's client area. * * \param window The window to resize. - * \param w The width of the window, must be >0 - * \param h The height of the window, must be >0 + * \param w The width of the window, in screen coordinates. Must be >0. + * \param h The height of the window, in screen coordinates. Must be >0. * * \note You can't change the size of a fullscreen window, it automatically * matches the size of the display mode. * + * The window size in screen coordinates may differ from the size in pixels, if + * the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with + * high-dpi support (e.g. iOS or OS X). Use SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to get the real client area size in pixels. + * * \sa SDL_GetWindowSize() */ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, @@ -536,8 +571,15 @@ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, * \brief Get the size of a window's client area. * * \param window The window to query. - * \param w Pointer to variable for storing the width, may be NULL - * \param h Pointer to variable for storing the height, may be NULL + * \param w Pointer to variable for storing the width, in screen + * coordinates. May be NULL. + * \param h Pointer to variable for storing the height, in screen + * coordinates. May be NULL. + * + * The window size in screen coordinates may differ from the size in pixels, if + * the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with + * high-dpi support (e.g. iOS or OS X). Use SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to get the real client area size in pixels. * * \sa SDL_SetWindowSize() */ @@ -714,6 +756,9 @@ extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, * \param window The window for which the input grab mode should be set. * \param grabbed This is SDL_TRUE to grab input, and SDL_FALSE to release input. * + * If the caller enables a grab while another window is currently grabbed, + * the other window loses its grab in favor of the caller's window. + * * \sa SDL_GetWindowGrab() */ extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, @@ -728,6 +773,15 @@ extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, */ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); +/** + * \brief Get the window that currently has an input grab enabled. + * + * \return This returns the window if input is grabbed, and NULL otherwise. + * + * \sa SDL_SetWindowGrab() + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void); + /** * \brief Set the brightness (gamma correction) for a window. * @@ -790,6 +844,75 @@ extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, Uint16 * green, Uint16 * blue); +/** + * \brief Possible return values from the SDL_HitTest callback. + * + * \sa SDL_HitTest + */ +typedef enum +{ + SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */ + SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */ + SDL_HITTEST_RESIZE_TOPLEFT, + SDL_HITTEST_RESIZE_TOP, + SDL_HITTEST_RESIZE_TOPRIGHT, + SDL_HITTEST_RESIZE_RIGHT, + SDL_HITTEST_RESIZE_BOTTOMRIGHT, + SDL_HITTEST_RESIZE_BOTTOM, + SDL_HITTEST_RESIZE_BOTTOMLEFT, + SDL_HITTEST_RESIZE_LEFT +} SDL_HitTestResult; + +/** + * \brief Callback used for hit-testing. + * + * \sa SDL_SetWindowHitTest + */ +typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win, + const SDL_Point *area, + void *data); + +/** + * \brief Provide a callback that decides if a window region has special properties. + * + * Normally windows are dragged and resized by decorations provided by the + * system window manager (a title bar, borders, etc), but for some apps, it + * makes sense to drag them from somewhere else inside the window itself; for + * example, one might have a borderless window that wants to be draggable + * from any part, or simulate its own title bar, etc. + * + * This function lets the app provide a callback that designates pieces of + * a given window as special. This callback is run during event processing + * if we need to tell the OS to treat a region of the window specially; the + * use of this callback is known as "hit testing." + * + * Mouse input may not be delivered to your application if it is within + * a special area; the OS will often apply that input to moving the window or + * resizing the window and not deliver it to the application. + * + * Specifying NULL for a callback disables hit-testing. Hit-testing is + * disabled by default. + * + * Platforms that don't support this functionality will return -1 + * unconditionally, even if you're attempting to disable hit-testing. + * + * Your callback may fire at any time, and its firing does not indicate any + * specific behavior (for example, on Windows, this certainly might fire + * when the OS is deciding whether to drag your window, but it fires for lots + * of other reasons, too, some unrelated to anything you probably care about + * _and when the mouse isn't actually at the location it is testing_). + * Since this can fire at any time, you should try to keep your callback + * efficient, devoid of allocations, etc. + * + * \param window The window to set hit-testing on. + * \param callback The callback to call when doing a hit-test. + * \param callback_data An app-defined void pointer passed to the callback. + * \return 0 on success, -1 on error (including unsupported). + */ +extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window, + SDL_HitTest callback, + void *callback_data); + /** * \brief Destroy a window. */ @@ -908,13 +1031,14 @@ extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); /** - * \brief Get the size of a window's underlying drawable (for use with glViewport). + * \brief Get the size of a window's underlying drawable in pixels (for use + * with glViewport). * * \param window Window from which the drawable size should be queried - * \param w Pointer to variable for storing the width, may be NULL - * \param h Pointer to variable for storing the height, may be NULL + * \param w Pointer to variable for storing the width in pixels, may be NULL + * \param h Pointer to variable for storing the height in pixels, may be NULL * - * This may differ from SDL_GetWindowSize if we're rendering to a high-DPI + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI * drawable, i.e. the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a * platform with high-DPI support (Apple calls this "Retina"), and not disabled * by the SDL_HINT_VIDEO_HIGHDPI_DISABLED hint. diff --git a/code/SDL2/include/begin_code.h b/code/SDL2/include/begin_code.h index f37ee369..04e78c64 100644 --- a/code/SDL2/include/begin_code.h +++ b/code/SDL2/include/begin_code.h @@ -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 @@ -41,6 +41,14 @@ # endif #endif +#ifndef SDL_UNUSED +# ifdef __GNUC__ +# define SDL_UNUSED __attribute__((unused)) +# else +# define SDL_UNUSED +# endif +#endif + /* Some compilers use a special export keyword */ #ifndef DECLSPEC # if defined(__WIN32__) || defined(__WINRT__) @@ -56,8 +64,6 @@ # else # if defined(__GNUC__) && __GNUC__ >= 4 # define DECLSPEC __attribute__ ((visibility("default"))) -# elif defined(__GNUC__) && __GNUC__ >= 2 -# define DECLSPEC __declspec(dllexport) # else # define DECLSPEC # endif diff --git a/code/SDL2/include/close_code.h b/code/SDL2/include/close_code.h index 9826f147..d908b00e 100644 --- a/code/SDL2/include/close_code.h +++ b/code/SDL2/include/close_code.h @@ -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/code/SDL2/include/doxyfile b/code/SDL2/include/doxyfile deleted file mode 100644 index 495dbc19..00000000 --- a/code/SDL2/include/doxyfile +++ /dev/null @@ -1,1555 +0,0 @@ -# Doxyfile 1.5.9 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = SDL - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 2.0.0 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = . - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = YES - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = "defined=\"\def\"" \ - "discussion=\"\par Discussion:\n\"" - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it parses. -# With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this tag. -# The format is ext=language, where ext is a file extension, and language is one of -# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. Note that for custom extensions you also need to set -# FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = YES - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = YES - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = ./doxygen_warn.txt - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = . - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.d \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.idl \ - *.odl \ - *.cs \ - *.php \ - *.php3 \ - *.inc \ - *.m \ - *.mm \ - *.dox \ - *.py \ - *.f90 \ - *.f \ - *.vhd \ - *.vhdl \ - *.h.in \ - *.h.default - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = ../doxy \ - ../test \ - ../Xcode \ - ../VisualC \ - ../VisualCE \ - ../Xcode-iOS - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = YES - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = SDL_ \ - SDL - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = YES - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "SDL 2.0 Doxygen" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.libsdl.sdl20 - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = ./sdl20.chm - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = YES - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -# For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's -# filter section matches. -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 1 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to FRAME, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. Other possible values -# for this tag are: HIERARCHIES, which will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list; -# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which -# disables this behavior completely. For backwards compatibility with previous -# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE -# respectively. - -GENERATE_TREEVIEW = ALL - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = DOXYGEN_SHOULD_IGNORE_THIS=1 \ - DECLSPEC= \ - SDLCALL= \ - _WIN32=1 - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = ./SDL.tag - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = c:\Perl\bin\perl.exe - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 2 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Options related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/code/libs/macosx/libSDL2-2.0.0.dylib b/code/libs/macosx/libSDL2-2.0.0.dylib index 1fe3655974ed510574a016c42fa2c959ae7b8699..a14c32372652574924a0eadea35ebc730e3733d9 100755 GIT binary patch literal 3939940 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

^ zbz3F(kHa^;^9ou;C#$qR!gtanpXw>w$2gVi{3qF0o5(MpC$zgrK1*md3eB=Ez-cw{wJgyS;X)_p#H!9|9*i{~r4}v$Fk}H|-dt5$;y=12853DM7 z>0_4J)4Q~w6*|}{8cD_%G;AWTbQoi%7&Otw4#5O{?2$iPzH5!0vo@QfkKMrg>6UNc zOY34EoM8Rm9~FGpT}R(HuSKqJ)qP>YrNy_K_Yv~mpn0nD>e2k1I`+ms$UG@OEizDd zz$iYX8W|Xz|K{jD;I7omzwAwPgXT|N=7d}J5M}R9wAwh_W}T%~6TuJq#Z+SLbBt5L z_gd3i@Xh)%3+>!_tKGxGU5(81hWUyVV@~^3_6($b<{jF-PxHN+2iaqD3p|6~VQ#+D zwlP1Ir~#<-Ej;*WQ~S}$Tcy9K-%q=zsUO_sWP$pG-$Uo-6w(IzAp5NKS9Dvvz7zZ4 zH~2ryapm(K`mTAqGarGE9lSnN68qrSza{TM(Vot^QQrhZxGt4QPB2rL{}|~~PxrZf zeMI>m#{N>?{r-Vt4!t~n{Lnb)SLoG%zH`q~WiO%&Y74sdmnDG^N4KU%ZUn5&Lx z(bt!VU!)VcutsPMXn!m&)zJzn4R3ti^!AN;Q9 zaD?@Z7sNNrI}>lP7Il*KuRAVjP5fo<9@pLCz1sAp+1l<)v(ch=b^jIz5?s;>tQwzE z@w|L#;Hy%1c!j&Izp}V`Hv8QD7nkCPHL`KS%WVAghw|f)`LOl}J~4z}m=pUp&VUbf zS9o~L_5*g^X{!$(1HNy@C6!j}g0DHf9^b_Zbd4i}cA}?^Jxh3>;rt)=rxYr$)>M48 z=;uniu7ZAsE}Pqyx^-_*AARL*6ZpQAy4LGG+eKSd!mnsRye~Si`|5_wT?@T+nrOPf z#1nHaXoU||{uRpG^BQPtvc9?L&yqfPw={miD*;;l5XD_hw=me)tl(u@kf4sOxedAN*hJ=p`_E>eAt%t#l;KKP~L zUxCk=3wrR4ByWd|FZ)mOxO!XE}7;3`+&a?yaT5Btj2$M2B(c(?UA-wn8~ z+`OFnz%^?|!{H15Vet7nhr;JO_=mygyKgA|c>ja&2fq!$pU?8p?~gz1YG`h7Jb3@Z z;9D>hKC|u*!5=X?@;6t*uim}9QSoQK49MqAt-E@8;rSz!m3_mS&+5w92gf(Nwi5Ew zJoaH+v9YYt2e*#;!Is8+=`VRa<`e2&>{q#x` zB5ti5`%LF-=)Bl0GHH;1##%n`b?|G;^UL`zwR#6^limRR$MEAnjUWGIGv4K^w8eX_ zZU08$opyq5J0)&A!L-9iKH09ee#>9fpU+>+ojM<*{)5!-@L8#)lfn8Yi%v$Y-{E_o zD;IQ^qyvAxJeW)UPf~xc2fuIKQ22eX{Bhy;H4KH{x9X1zKfWdLWez{AqyACx&;Bg& zX|8_eFTW@L+g3n7`S{-;{W!1)zA2SXgcg^d1&`UhE{{!BS?#Y=dD5geLZVeY4*xxX zE%>vGe{cTFKhNV-{belwS^Rvx!nI9U@9-tmzGI&>0GF>%x@gl1eAVF2;TvBBen21F z?|T@-O3eo~cJdprr?%A5*PQdYPxg-Qk-Yrvr{*{P=yb*jIN%%FT+Vt><))?7DO+Zp z#qT<&4%q;{IV053r8?a5l_Qj&lUKfQgz}5p>L|}T74qdB>Kbg{!gTUD<5lL4b%Sgq z;mLbGM7G*;?zr2#9`o#_9?4b4K7A^lId7^mA1|i-@cv^9rLlz~ z-gk$-zPLR0!B4*<`Z^nV{(|CHy#2UC_ii~cVdJ1%JMa8j{`yZq^QG{zFBsbT9Dc5& zfno;9CwzqeNNo%qUv9(|{ug=xQoZ}LsGaW`r3RCM#iX%Wh=wdF(Lt;|_N{AqCQ zi*^ms&a=ql!xz}H_6_E8l!HI5{!2a0oQ3jjgX@`PdFz?cxN*jG*t%vV@?7hsoR^hb z*R*=Y%dh#7v&NadFK>;rD}97D%?xY0Zj6F6=jd-D2Anyk|A^LR=%>9Gf_}EA%Z+LA z8$WZdW@lcta9VmV`tS&6>JrzcIaVzD!pGfjU&*!KhQD%~nHD}^rt8~v|7ONSi<;gb ze#L~xf9=(FzPIzeUEkMO+@-uIxJ3i8>>KzCe0KaD`ujpK_QBCXlC`?Ua7~4Yl}_EOV%bA(EZfP1&b&=MdK8?U+#3dH!416}x3mIH3}2ho zcRQcRKaXjsJyQ*xl%>abbh4=-Fa7|&{d_w1!N0%i(m|E#bM?8MC&fTH* zbK^7C9iI*E_{5y?*;K(=`qFpXH8xtuvunky9Wg%5gYoo(>qfM#@o9yZoO=cwUP_R^ zbufQ!eA0qJ4>(u{{Bsx=Wa>X(>7|38?hnI{XD>|)xp&55GbR3RP`)Kzw`UTS0+(p5 zmM6k9hbPKY&(pxu2=2-`SHs2KUv;H6l$zw~TU*gR)_w{vTlq@tgZ`g8`1AJ&M&Xa| zWohK3gY&=I;^N$$+pp}W4ChZMPTw#4Jfu4u2X)=u*kk=$_@;Fq!4{UxB%jVKieR7V z%%VAhLHKv#?WZ{BKW+6-6}+hp$Mfp5Fk=6iW7uWR83@Q*>SY{%vfLZL1Gm|=q`WcA zjY$jT`pBO@hEZTi9GIaq5c0<{>hW2cGDj%W&bY60;|c01lUsKYt|;3+0u6LfRy5N| z*+<;64V2}qf5~f)r*my}t1dmz#be}aRBWU8f&Xe#F==*hg7`dIG}-#6nJWbpYb@Q| zR$~g=9weSk>!!0@8d!o{E=S*`?brkogPPRs2v+h&$iPaOE8)_!o; z^`VK}xgT-xr6;EkH0Kz$7NGCa2eKJnKwkj6_GOxcsnZ_K*Ot?#gqi(>*0D-W;X%eA zBKag+LwhC@KHvWmAL@<}@u1EQN-n&~?x$7EjuR`fp~|(9Tz+X@5c}YbuQ>Z!ob$Yf z^4ErmL;0(D75Q&-^84Sh{N>ooZhb3Q`+8%Bvj@h15M5vIj;Y6=NBKU^{r;HdEaE?K zKZi&2Z}DN& zy3^F%%%hm4*1N|#^s?%wPAtx*C1%~G3Ul9#l)b}k6>G(b-j#13-%p�oECNXR-fq zn~hg$h7P#j2O8k6K+%tAN^8Lb@djrfV#w}|$qd7__IaSMh3g{~qG_-0Y4j!BZ_I(E z@7AmRfzW~u=w`QUE$MHi0b9G^vAhb8t1NKj@pjmg3mvkp$luBNJ(jmuy>0oTOZ}kl zJNdSQXE*)n^!8ziH-7d^q|){U_*s|NnH@R4j{{>Hyni?J*8xB2oie*^{? zU9D^Sd)!g8Fi@*C->WXNd(G0S*L%Vj;mFcDA?sdBYahq6NOz#HcG_ip>u=|bN>e&r zzJp{9cS_vKd6XZRDQ$HD(^gz)(l3^n@Vh?FrM@wk7=24H{Qc2pTA45Rqp{}`Xl?v-Woj<3eZ06+L? zEM7OW(f{JiPR=jgJlXg=>y6K&Jv-iup|dwN-t3ichPFO?{@{444b@c)z9)Ef##$Tw z)LCrnETGOp>MUaXN7?#5;`ld4sB12Dea0BhNAYjId>DKmMi0<}Xd<5;8ppbQE;0qw zTe$glQv^+qf3?+o_rw2l z^Z0*W-5~$ZbNPSL2>j1jI{c6Pg8w_t#Q%4V!2e?@pW}bk!TAF9oMW-k1cr?N2xVPHoD*XS5@2kn1 z;hX!3*I*BE>dVM>SEnW8HwMdNrl4s>8E4|dC%WTjP|ok2z9O4#`T{Us#8?|-{RLJI ztZK(zX-8Mq5I-ZiG(?_Hqkjvj>$iVAdCp!F#e(MaOZ)F3 x3Itr1)0iCJPUjET! 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

W`W>gXs;}?KUuazz2lmDNpgUtgo5z7R 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∋vB#mcYzm;7&Xu40N#EVcpZROlLL5TF7WyyM(DL1 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

az zelo`#>Nb9=ii-*;os&(^=GqCX(&ajBn4+IA)D72t-~qRl z!Dfe2DSYJD(}@+&SY>U661p7r{D@hD2c z6p{K;Lp(L=qU+cirtqP2ftOY!7o3g4$rM}#`Q!y<&c zKA`>-2P@p^;l;_GfGwdMRP$Kkj8Cnk=Fk?5 zuLKwy0NPWy3Gli2L1uHTb;evrn>#6Xo(*o{T(bF4uBnC_s{p>tp+#*>R^yCWJGDpv zf4D24B8%M26aYSYc;ODiJP)Pk{OzzzVpxmWLK%02r#cqu+X7{HIZPC!A_@Su7Q}Je zNA$z%rD?#z#~*v#+(b=XExD)cr-St1)ir5+?9J>h3>U&&EcZDXZM*+3d+!4mRhjnx z-@}|4M;NA|sHkWDG|eQd(hASy2s&EhQEj zl@%zGmK7G2wxmWA5?Q%Mt`QY=|324!uHziocK3OH&+qv@uix|a)MwuJeVyyN|DS&| z!)VNlx^18Xnm*9y<)TKN^8aS8XgoLs?;YX82eT;$=7{H>&nwZv?cWBBj5_c9<3RTJ zqeD1)?lCJfeWK&Y=ktEO{;fGNeg%TNU=}CN#k<2aTlB^1eEbT^ExPe9;@~X-^^L3C zv3Mg2W}4@-@t{vPl%@f(_$K`=^o!GU9n;4a;*ZO(Q$IsN?}w??s(y1DvHVcc&jSn9?v{oy@|i_H|?lfvh7^b@WZWjzW_g)K(4?0k$*+wL} zd_0${8z1_2SVxhJ|FM6@EvN*f@6U`=&xyIJ{q)|9**AO^h&x1du3yLSw}`6m^ue>Y@3QFLZ8FCr|!!Ch8Bx9LS1W=!YY)jrB(vLNeeo@;MQv0g?Nel(I>PoL0k- zZHv)zLPBH;o1h}j{uR#z5-9hQ*o=Go^~)~;L$6&bLxVum;{@ zW+Q#a9auXMl7k>xVS^#O<1OMKH$*?_<$=6V0(2O3ICLa*6qF1d2hn$IQXzWF;Uox8 z7UFb>s=+s1#JNyDGzFqRt)bs-rhfwVPUr#XNoW!{E3qww zHb8rYh|!@-p$DO@LfFw3JN`t-{)P}*3Ut2^ju>cx5Kgq;xf0!kzw1yag08|Zwh>)z zMOQHf9()3N$ZO~(co@bb5p^8tL^tsn{V_X*@U0MH$jj&^`k(fW5b2)@G5T^LPQz!+ zXTFMeOxEDcoriA=-HvZv-7G|K6wYMt;g=(91!cy+Hu1ei0ru$ zdKF^*S3`cDoOe=Ej>%nbetUYsxku-;-7;j!${@G%A3y zpfjK|p={_ZXbhAC1)yB$Y-lW$2aSWqL+3yfpmU*#5Y~*i13VwP0J;#$hc1E&po^i& z&?V5N(C?rr&}Gn6=yGTpbOm%JbQKhY3Zd!H)dCxM4Kx$F7McZJ2NglrL&eYy(2dYd zPziK1bPF^angiVm{T})QG#C0KbQ?4enh*U6x*ejvgrHJk*^s{ry4zyf;tD!Z}i%>oE67(|k3bYn_6?zSN9cq9Yp>@!D zs0rEtHA8Pe8=+0mo6uX(X6S9`9q3)C1=<3=2fYuqLLWdMLLWg}p>5E|&|jf8=o4r= zv;*1+eJXfEIs$zTbwInIPUs7$3;I(0AJ_uIW`klNJETDl$O#RCT+m=B7K(%1P(0*; z4uQN-0(2;J7?cPd4jlm<2_->CK}Y`|=*qz=4vxUV5%^DyfHNPr78gMU(8bVX=n@E} zIBif2WQR1!0nrW-7;M~MG%?rz$oCt}K+Gre?>J@1hfPegNg+;TS3NWQl*DO+WVc}$ zi&oHyF))4Q;?VQ*7zBZylZdI`S9G7ilGl(mh*)w<{={*@f~Y%&Wmni zCjIiw*!NqV2innV?7PEk*AIuE6NG8Z#3i&R@p{*#6G# zX%oj?@NLePyC**M_Ks_EKA01H_Sjq-`Cs(F@bhza-0<>_n^wx4U8m4y&)NId;0Qw3 zjTse5yxjIZ<#(Q8|7AVbfBWg3*=6F^%IrstdTc9hJg&L-@0Ve`#!`)H+1N*WI$Nx^>L!jk%jXy#BkKgiDKFNNrEgnYp3(h;@w*-RUXM8G}c1#x!Kb9@VmgkCJFS=T+Y=2#BDttwx;CD&RKL0}zah@wi zemz)x@L;m|_1JGj^6C-dFJpF#J5T*yjC?&$Ec~iclnk#ISKXc~vX*=-vKCw{vi4Vs zg;y;SjX$P|Gmq;PkIHu8SbB)~c2t5`G&NS-aNG^zwAO09D_r7IyI+j&n;}X|Ac9*y+F^s#Z`-E%@iSuV4FGgc6AAadOVs_2jBG@rcG%db9 z2kV#CcHq!Y<_C@fk1M(@Fcj(3UtSN4Kt6r^8G%u-jXq~u;AGe{uCEN7ihZX)up^L# z{b$r46Uc_oS#47TIq(bIJ}Hn3-?P2NfwSR1cG==U9%9C2)CR^OZv30?2F^k3gel(y z&K>eI)jv6ab>CWFc=YtEM=J(#(!X6JNX<-g(W%?s4=20vxTyl2f@@OY|z z?uOhFWUw{X{PfkjvdpbxhU|T+v3~W&F%RB;VW_fT)tH}b;iKL?ygcVp%>Raq{*bdm z&HtpF4~@7SzT;5i0MnQ`c_-1H?B4N9L*SWnTP_NMS>4AhpnT?Ssd@lBZP%ScDSzs9 ze?JzW4d)H@aD(%PaE{@2ZD8g!!HTU(R}g1?@yQue-`_TW%+xQs?me;cn=x-4yX$wW zfBjR=325(z!fiRF2?+__-e-8dp3BEu{Q9?Xyf6J`V@~tADG!PTa(% z8MkE<{`O=2i*@^6nDh7zIjiGmhFj0NX#J}8lM32@c|7OYdFQ44KK`5a%j)yei;73( zl&?Bt*U;?=*|(i|$IwyNbYzzr=cnwFL1njfzuTC-#K`A-T6?Xd@bwE1JXd`?JMP2M zo+s42;d$$TAD=hOa?Se8c9`um+kK!v+#a)?X8X;4nf=W!H^wdJ=+ipBNgjJrPS5q9 zpA=mG_WG`Ef34kp;;-vJj{WHCDJSOV^j-C3VDuf8-Bu~3&fu~e5Mh*i2AO>EX>7O_K@xkNESP9*9hWC1ZSLQW+Xj*!!dr6Xh! zv1){zO>7<^=Mg(b$OS|(S}r2$qh$p#Fj`g;3rEXpV(DmEORO3#>xs>yWh1d;wA@4# zS#k?e&yw4Sfh^fhEXs8bYkg5SwyUwC}$I!C(3!m zj)`&sQ548UM7=;(5Ca9Wl2}+EtBIurvX)p?AnS?E1+tOYQ6M)F#Z2kxaPnTX|V7g2q7EYHsv2?l|L9CiC zM-!W;%PeBYbeT&OMRFohFOmhsK#`nEEG&}KiKRudh*(u5XA_%?ht6_Vql(ZCl=0=UBuFP zaxbxJp6nqu&y$kaF;A*@6mgz)(SffokX~Y7flMM6E|5C0bb%Z}tXd#P6Pp*vEMmt3 znM)LlyO1X^~sFdx*!b;giEUlD#iB*-dhuB;x z)rqd7Qi??6MYVJh^=j!Q2C8Kev9Ma|#L{Xxf>>28M-!W?WfrlcTILc(t(-{IYh?j3 zP%Ebr3v1tzKoP%kTqh4r$USXwV@iB~0VpXH;AvQNkN$hBpLY?S0Nf%My zB)!DICYeMm+$42k=_WaXShY!xCN^)9S;US_GM6Z}$caRKi!2}pw#cc(!Yy(-v2=?p zB35mYvx&`H7P){Zw#h|AeVeQx2DZscV&OJfO)T9eYl&6cWIeHYn`|U@Y?GUa zqFrtw>g{qHG0-mCiG}U5i&)w&_Y$kxWe>5rU8)OQN4r$-oQp2$N`_tUl3rqY~26N&m>SwIZzl~aj@d*yUu>0VhxtlBGQ6Px$S zdBl#rasg5F$VEiGM^+F6J+hKm*dwcnr9HBiSk)uziOoH-k=W5AHxY%DTZp=p+lT=v z+lhrzb`eXZ+)J#IvWM7=ce#lj>M|&i!se2={$uk>T>r7*+E_@`rSWd!2#M=Iw$T#T ze{8sRbP#dvAc%?5r4tJz-eAHuRk~C>&aI`CFOn`5KU=y~{56|tKzX%$sKDjNhfZTc!LUCyG&B?m`fGES0<_W9+{-# zu>>ey<9i&Qf5)Si|^rFE}5%S-Yath z#3Y$Z@h;rsP`qn|%%ynOXqij#t}L0W;&Y9AKNs!+bg~!7i2>qNIZ?$=mlIVyu8}H! zww$Qq=gEmGet~h%=)$!_#aGAz6<;X}RD888Q1Ljos`z?YpyC^4fr{T`+-tgU&QbB( zkE~l#aE;&`jc+h)#k;+7dVrWDr&GLJm(wZUje9wY zcaN6SDc+qWr>po}Z!+$s-8iSJ_-%5Yif@sfwaS!gry*R~ty>bD?dz0h>iudYr0mXZ9uS)UW(Q*OBd$Z&M6`yO| zyL%_fMLOAWFBc$Am5WsTbh${y7s*8`9``ybex6*U;ujeA{N6>fLdD}AK*d+e3Kd^1 zD^z@~tWfc|MymKmS)t-L8P5vdEwWO@K2aFY z7>O=fP4S6%=Aih*Bw0=IiMp(&_{0&in&K02PfqcPS+ZKi=Niu@i4$e5PIla@28dH- zt%{#6YgK%atX1*2ms9ccWUY!{U_8?#E|T>s9``sZzEak!_-a|N;%jBSipM>Gif@$l zDt?pkER?uKHmZ1B8&!O}Y*g`GvQfqFm5nMM*A5jgWh2EW3F8?m$t5>Yd=j3iC_X7k zZld@kU2dZIq!Drx#V6sJgW{92uA#HrBv}fQmS~|10bF+{^H;p0Q5k7@C|^2ZvfDP@xeC$4!!|E56B1K066#t06i%G z?|lORoipzN4!!}P>llrLZvY&810aBPaPSR)gKq%P1JuDc01mzZpdO(AcfJ9D6@Fk- zZw44I=KBKpJlJ@9ot?b+ZmBm0(jceJhOe0>;O|Ke!{3t}j=v{45?>$1-USfdWuA zlnb2=ErIf&a%ensJ#-F4+gRutXdGp*O@PjYCPL>ylc2Mp^Pw}L3!pQgeCR^xB8a|1 zGZUh*p)ra;G)6RLnlX*4O*GCikPXryns*vQ8b2DxFQI<%fiODt*kh09%$zy%^pFUh zbBBbB+Gt(|u9Km#4TDmkRA@MKJVa}S)(*`n%`rVFTh|?}Ia+(PerWB`TB7wsYsnAM zI*LH(3y#U?`lhuV2hsYXwMA=<))%ccT0_(qT5AK>zXLXN-O)OvwMT1_#)8%jjUBB+ z8c!N)8h4scng{C~=OTYLL~}^%>l}#IM-VE6XkA&?4y{G&x|)vs)zIUZ5*s)J%7ey1 z|7xRk+X>Mcru9T~M;omfS_`yp%=JO*hSmtJ8(LSio@l!RDuqJOOz2vOHd=qbwe5oO zOXwQt3FwayZMPW^^O=7FZ-?eVw;DDZ%@ekN_Wgg`G1!Osx6yhWu-OK~j`d)}JlinG zHkxB>wxd`vAm-C%hcshfzt>r?V}00YzW?1ueS*KZ4l07Khl-&apc|pz*wnlYuv2^f z*{0fxHmi;1Zoo$UrOigi!EbGIu@A?F4abme5Og?%W5R}G$VSJ{e`Fg0r-R4tf8Vh? z;5elDQs?U5Iu^}inT|VJ4|GhM$FudA`>k~e*8`h*{2nk^68Bir1Cw;@Th9e_%wmoG zhmLPL-mK?iIv3NiKJa`y12#G)ux9(6_i@Z0yx+hW&~?CiU9es==z2n15Ta`e&E=n= zyCCbeC>!})=xk^Sln0eVw5I4hb`C__Sm+vP9A&W4x;q!5HG3XJ*9W@J(ORYJ9$h!+ z8facm=vu<}8xrSLx;9Ikzv(_reIj@QI2id8!7sopa2<#;LW15u`2 z1)>bO5=5EuJ`l&Xd>TX>)YlC#zw$BUr-Dy_mxGUhm}~hYcm=o=yb^pEyb63241$k? zn0xsYh_xc02dUiEAeFlYq;g*bsoZ*y%6$o>a$g3i+*d#Fc~Pq_NHqq{mv)h>gKK*vjFLvJRxj8`V&CR1T4<@0W(p0Xxb$kjC1!2T&H~lKc;} z&6-Ag{yR1;g!*QpDmj~?T ze)_vGdY0+o_%4G+H2vLFzx+SU4gH-ze4UUBiiO;e2lDbhYYdiz+OS&>>s9(PeYsw( zuh5^-|DxCE&+5K5_e9!p);;ZpJ>wC_((pT$S<$K=ug0IfE z+PB8{qOacflJ8~TE55b9SADPfUiUTl8hz`0>wQhW4ZddI8@`RcO};mMZ}~R+-uAuY zd)L?E+v0oA_r9;y_kr(2-$%Z!zHPpbeSh_}`9AS&_wDfQ^nL1U_kHGz_&)b__;&d^ zeP8&xd|&!@`@Zsh?fb^J$M-kiUf;LAZr^uyVYm7A`@Z+}_D_mn;{HaY`}?lrzewhy{rvYpiZO7~jZ%QiX=g$-wg z7#!`<&GtYv9ZmU8>;ABt&K&<_^PS$^(Y@=R?CfWbxy;+@{lNR7_apCC?>6tp-oJX= zyq|ctdv|zudO!8Hdq49=yq|kJyt}-e-Y>je-Y>noy6qona$M&)!%^fo({a5c+fnQ|%W;EajN?W}j^idr zz)|AJb=>SY+i{CytYfw#&oRd_&T*?_yyN$da~ywgOmNI~oa^|bW1{0W$9axL_sB>A2Xjz%kje&~b_5F2|*gyY-{Q@wNin#kRS= z7@s=)@j!qT?F&J7`r>^1jDhp{e8*AB7x3lc^-^D{?{~fhzM${#zJlI3&S~za%>}p)g^3!qo{g60S*@nQ(2wtc2?l ziW06*C{DN`;l_lU5=s(oPPipucEX&5TN7#$o<%JyRV~jayfC1SR}$8uhSw5aPiRPJ zOjwt&KA|aLLqfCB)`S2t;j#o=yA!^Fel+YjD?ID5d15?vkLGcBoSs1*muIji))VJ( zd*VGF&mkVKC&6>5=P*yA=Wx#vo+CX;o})ZRdyerWdye(^JjZ!-&k)a0&oEDlC)G3D zbG#?bGs1I%=R{As=OoWa&nS=IGum^q=M+zd=Ty&Wp3^;bFOEi=RD6O&-vu#$@g63DezqEne4g5bE)Tdo++No^dlXujt?9k zIzDo2b!>Bd?D(sr&GCt2yJLrAr{hycyW=xQ#PPYK!?DZJ>G;CY<@nOE+wqm-Yu&EL z=$h`(2k9<-upX-?>W3LE(TD4)LoOaNdB`P0E*tqjg`((BU&vpGg^<;!cTAp|ie7iA{-1O-l8qx>FNVvs1~Ww$$X* zl+=vW^wgMP`miB*D=c}~vBP}B)DdL*{5FTq7#bXU&CnBvW}w~Z1zrcK*KtE}EjG5H z%ghw#k7nLEbivROLr)lb{Lr-i9{)OLd(hlJqXcX?62D!?2Yzy_VxBA`v&_P_GbG=`zHIF_P6Yt?Qd%jYL94-Yn9qE?Rl+ETcf?K zt<_$`9ZQ?mq3zc8Y7c3TYENiSYRk13wAI>++AG?t+UwZ=iMC7oO8XY60_|e$B5ksE ziFT>>J8g<~nKo6sT$`pX(XQ048ghgdquDhZK8|o`PHm9p(gtg>TAb$A$~BL6h<1VI z*G6mOwG8c4El)c|8>eMzS=t%enOe4XmNrJq(Js^iTCR4sHdZ@LJ6W5gou{3yP0-HQ z&ehJ*CTb%!ua=+<*AlhEwG{0zEmcd>j?#|Sj?t2}V>O?4oHk0+wISM2ZJ2h1cBq!F zov0nDrD-Q=BedhS6P(@7@0|Obe|PS8e(&sY{^0C&9yq`BA6sXUv&8vF=k3nBon_7? zPTaXTaTo3kIt!iComV?&IInTebYAP6<;1I)^)tccwW< zI8Sh%=uCH>>WK>O9SPx--+6&$bGbB=eO zD*tl-3jbgH&-!=yzwm$Qf5YGBU*@m&KjW|QKj&ZRU*&(nzuNzz|0Vw` z{#X64`y2i1{Tuun{crj=``_`u>u>RI@xSMP-~XY1o4?J!!{6@z%pdW8?(gt-`n&wQ z{a^XN_J8Bw76?4KLHwNn`Ar9v?Gt_A=+%SY(;qOSAcDlu@CkmmCuPt zjkld|JKeM+Kif##uCrZl8*bWdDazlE{XQGcEyiX${y<8dylkVf|2UiRxMJ=CZLz=g zj%?Jyrc;{UxivOhv2B`}Cfef6cQdWlXxfHzB)o90Ha6Q0wkvE}Oq(qi*0XF=$!ZJQ zuC&dt;i=E|C)+%{I%0O%&IZTWE{}N&EVNx^yT*1~%%`^7ZS!rDRZI-*SvDtLvCipT zQJXqf+B`O|ZLIAa<&&>or`T@9-V&9bj?^V8g*zhK8S35Dc%+Vk)DdAj1h*S`HuZ!< zziS5jWwx8}if3B9ULErZ0Yd%ip$gFlK9@*DnnsFRqDsRLUk<~+eG;@9Mf!6ya8;E_QQ zi_1c6TDOQj9vabV1pSlO*zsNwJEdI2KGq~+tB@`Ti`ZwO8*~*BI~Qf#9K?PhVyjC; zYz^|u0wVSiz>KC!&gCh3v0DQgwq$h?s z{tdr~Z>|;bZ(w|yBTyKc1G%6k*t11^Qw`F)Mf`?IU_O)#bwd=>iT#Lgs>A*X;0!Q` zH~~(EBJi0HrNNd2ZiS8NM7jy}Y=FJF7tDat;gg6w>TC`njrumA-ln<8!@glZh&q~! zA*y2vY;6$yH)OG_Fn8n_3xwIJrc8Ray$BEJ*FzBjy3GSahPs|Ty0KG-rqDz6)L zE{2+*a^&kEfpjZG``utAR18f+-V3>qZa{nq1Y6Tq2<110k*@*KjwaOAQ~|ZXAMI$` zjD0(iM%;!()UQM7NF(+Q)UhE6OaYVOOXb49VAt2&j35vMq!XoZa*&x3cAh`192BJS`e5w}=CVG(yP_SJbs+!3uJ?uC$udlB|g zuovWuxEcumIAGjsUJ>^u+P@(n;^rd#d)Sv_tu^W*ZX@zxKWq`~122ZHt{ZL9MeN#q z#N?q2#MOpG+^t~|w<2G}J<|$%FNFTTF&X_?i1ZW?eQchKbSFst-vgGTk7Xdn>kX9G zEI=2O2|MDN{Sd~j8DrMG7%_d&MhJB@gxslIT3qAhVIR+a$jfIcb_;rZ~(jqB> zk5>=s;20cS1OLBV1AHXAA8z23O}HQ4$mtlQTab={>_~3~={`h5dMEA+_Cs@^g|Hd# zUK;yVR)`0i)H|AnjpDE^DPbFx$=kz0i;evr>Smi}dI_=A^dlSlJ!013jQTxcwXxsh zg3F8E--xHp^2o-1PnLuX56)Am%fc2L+pF@~X6eU@pvA_1%Oh;F^rOZs&(e=)Og~FM zYRx*x#^pU{)?w*Ko!MqfKb{W=;|?a;58KKni_NgxR{7Z$?T798a*K`q>df+@{jja> zX1{1ZZ1sX|(SF!o)-5(JZ*7=u(SF!)?KRpQ?T2lhH}ntvXzI4uxV+{d+bsQfBVw_! z-==c5S^Du-zQx9VZISzfdsqAA36MCU`SD=+_te!Nj< zv2pvFgKV?((mWPKg362i_Iuce5kW6+7Iz@#A0K=ZKhweA7Xnq`&s6rt%+^X zeuzlE#m41*8em(rAL7dri;ewum6Yn#4NE^_?(Hts$)s$CU(Dk2Qk_idnxqmU=6-*v zu9DO@_A3vtE!vNm2ZI(H`#o&hqWy?jn$LdGbrn;ovn|?>n5WJ5S>~gA%Cp%`KXd$0-XOCr=J>(pXyRDY59P&% zEjBLCmCrVFoDmyeVzF`i;>_|)Ka_W9aDX3do~F>i`LHDhEH*ChusVwk!+^1}9bRs+ zar+X@`werP(Y_4&yNyp~ul@ADwr%yCBSE~|~(_k|g2`k}lp&9+$PW4GB~ z%Y1wj<~q!AMjd|}=!f#UO9uGCwl5Tljy;VFVtcwRHg4Y!1N{)&>mT4pHr)JBF$b1UabU&90ZG_*js*o^XGY$a?n$2msC z*sV6BeK8I**7QSpgUq%>=Oe~t_BT2oF>!TVM|3`7@FtNlE~X#K^M))oZr`Eiy(r~r zLw`>)?>ot6w9j@@zPJCpVf;p!_oAjBY$Hq9&vJbDtu`)iRNVkS#GY)HXE|Su_OhR4 zK29;)XPJ+an+Euyywidf8`TS2hUsUHGy0opw#6K0*iH{{tm%i?Y+` zb5Yo0qxwgU+#e8gPgwb;14;6Oi=ceUvkosXEJI*uiq4MH6^ zT5Vk3Es+6!DDU^?vk=A6hV?SdeC{EeQJ!s@m!DlsKg{oy)>yK`c10cgS&omO)yCyr z6&~P+*sIGeHZHHwjE&BRZKlqC(fP2=Fk?+Wly`m806*BSHT|OVVY{h>{i5?>yTNa< z(YPRXZqQ=m_T6muBRU_pKUrL}^9Ea}sZ^)x)VLEdm(SLf>XcMA zqr8~s%1d=J9q_|kt_+pxWIEsnTWzpZClkssHk7x@^s^iv&zp6aeu#a+e9kldU|X%1 z>Z%~kD302<#*8H!x3Au8pXrC#m&2vHiZcCRTN`3qbUtEUH~pgX5wp%ezz?w-0v4Mw zA2DyVvdtW4v~RQNXO1&$@0xX(ekkvKvmd4(Y#(`-=z=yXpEevH_jOxrMt^Ph1uQo5 z!(2X4VzC+Rv)y0LHglX&UU|e~OHHErS3d$*^=N`l-`9rFlB;=`_JCUby?nGXdgJ&ixXF+~QmGenm zNR_i7f@qhBIVxXxQBurNtsu%fI*1z{BKD)4m}6)^>c12B^(ZIi82C|pwuc3cP)u?O zq7Z*And4T3F|$a>QMJ z@kqh##sWPYlBm z<&@EWl(R5cuF5IvE?4Dz3Oo8G?g?Qp`gNBG=_n`Wu5#oNf47c2u_=U_Ma-XrAsscu z{J9%Md1axHPUF*F64GgW?h&w}9rxy!Q#s<^R^;J747E}@!^+F49I*)dQI1%I{nV~| zn#xr7w4D9ruYPsy+9Gkw<(A>?lXvpT9)4=K<`e_B??7RL;Et_^R_yjz%C{3&(9 z{c5Xl-ihy_-06jMD1gtN{L01oM3ZnniG5E-g!8G0VOtsy&c{lG^Ko4`pFlm>oONO0 ztcU&OeBpeRV{2f04z^k$oX_KPaFiLpVv>lj&VcY)`0`{G8-3BDNtJTq_^Lx{&;a{D zzZl_44F857&SSk~j^O1u2!8aLI?lBcuhEx*eh66<`fb1YFxw+|q4MB&Pd;94D*dls z2Gy4QtKA3o9q{Yd?%(KdGLK8Y_WYyYpbG;i8{;>iy#D=%2d$6a@Kb{XXXQ^G<$>Sw z8(19tg1_ZAusHaI3_ra7tL?zJ{3|EyGyUR=%aFtOE{d|jheZ6$5cn;=i$UMVXh9m= zpv}VFz7Ywx%BuXMDMp%J)&8wW@HJ=rFs69|4!s_jMAp^yOD6Htjcez zK-%ixjeJ~me|sO&miW&oZHfQPi@YWNvqa?0_MtzYB@c*C8{nUgyar*T_I;Lt1lB)o zDxZl2m4S`&U6YZp)Ymm-Kt7DT4q;RNG@jH(Y%1S|gr)sm5#%lH?V|CqjAs`uRLgig zx)^y&`}$@e&*uXwzpog1JA@7S_@QM;3|3hq--2|s{`izia*XazsYW{5-uM)n4@*9k z#wyyr_*5EiniFhPUn-4{rM}b(AQ$9@yig*P1f@V}P&(v?GN4Q-8wx;q&;)1_ln+gYf>1Fu2bvEp zgcd^;&{C)xs)g#I2B-jeF3!^>ZL`a9yA=Dd2ePPrSo(9c==0G7e749(V z2&4RP7()5sItX=y*FvZ#jC#TwA=DLafm$Kd8E%7iLY>eaXg|~^+*KOnh7zG92<@m! zgZxk?lxJN6$fI3V)B4%|D;alH3Cf!fErb?B6__vdp{f$9foh?82z{z*`A=2luG)&2 z2!#GF6A=2iECtGd0?;IA3N!;kJC>mh%gQ0ty$p3PL%qw;mSrsv#&20C)D21R%WI(qs1-sv%X@{pT7ytVbsB{D>Iu-41ATN?ql{{l zQN0jCyQ)!6bq$1eRW}{*`|nJ+t6NZ48-zAjqwm$|`wAC?cCSF+SENAc5Zb>Y4?_P} zOo1>4E71NGbD$7}_OA#-bx;%33Pqqj(Ek6$M`+;)o@?ov+r)4i8=gmZ_E)#Bxy%n3ZWfGjE8;?-TfbLlZrsmGL%mU34BLi$Z865Zr)zj5YE%CXJX)U?j@n{o8+Dwh zD;xR}ZOh2~sLgE4D5DO;kJ~cZZ}H=LPbrDo%(i40^{QC2EvE%7e%zMKh_b1%G9jqux8EF{*BZ5%<8po= zYBT5Pg1V^9oTL2isLdRg0zGOo$K~Qk)MmEjQll;X=IF9=zZDw0$2xaRxN7wqJHgjBN)kSUQxD@3_ZDw1Ft$sX5H%2Ue zJVzxKo7tAxA$9!qo1@=%M{QMVY2TWpCn+j4){;>TmPL?~OoIjZnRZRWT< zY_!ktj}->!LPuTvnAtZDw0uFv{yUM{6R=uiqTi=SOX3TV6KW+;5Iv)h&KJF0WZ) z&9*dnEq**!>q?ZZ-yCfSMQ!G|ydk1Cvn`v9dR44BE}N}>+?IFz(O9!BEtXhwT;2<- z>sP-y`cOn|W?McgiQ3GzYzswgW?R|qMZ})u#eV$l5$*p3e=9kv+{k~6XXtPDi`aP~sMRRrmmo953^O+>nlJ8O zb{qCzjrS4VzoKo2c0>C`-2Gt@SKcJzkHgbN%_9N;h;NTM;qn#6m+_)JxOzKGBC z=<_%Fj4OoCNB_Y_pB-9!D2_f4#3yg`IUJ%&b+RcR_?l&rP5Hpr>SyjZ>rv%#IcB+J zQ|&>!tbSA%m1Xtg-;zR?LXg_1pZ|62* zk3IK#%cpzsZ#a9C^bw=8awir{onAD1-hxFHmDRQNjhnV?Ywz0IgMZ`N<@P2fCF?0^ z>Hdt&>_FaxN%@ytc17Ve*WGaQt$+Me>0S5Sx8&i+o~&B&-1BQ*er;XzoA12$;m6zC zJG#E!yRYXbDPlCIE7tAt9-4SW($UF2eQ3(?v=h=t`cKX{E%S`*F@dx5#!r|y>4N-% z$(K%7^^9v~UOVf$qU(!qxbdcvn{Syt=holYVYx8D&e zy>r3ByYBvT***6zT72LA50o!?@S%!_A9-}?V~;;k`Q%eihpUz?uU_%YUuvFxZe{JN z=U=E>z2?RGmtKBl?W?c7-q5&ieba{KH#Tm1^R3Nqzw>U(miOLo{ouoowr>0QuWg@f z-?8)4_Rk`pckJr?qU+1uUw!?}p1fy*S39e(sU>9^4L&!2g{iaNrzj zo<^DfcaFxvULPERgClTo1P+eC!4Wt(0tZLn;0PQXfrBIPKRyEP?f6d1_8Aa98{VD` zr9oc2ABXS7e6kgt40$Bwm7 zErggI`$faU%{f-y`Px7HBQnfb#ZJz80#6Dxih1wSn`YAT$}m-wKSZg(@L@ zw__x}+c7d93W)eo_AMH zeSH(qwzX(W8O}NM9b?$=ee(DnP5ttoIRAirU_d^!K4U(k{tFGi*Z|w2@C-^Z`inJSY}9_5H}owwsAzpL z#xl<`p7ezkztyE*TKV@I&wuo{j^}~$4~*wO`dced{=Bvg`+vZ{-+2C`zjZuS`TfT8 zAN~KKJ=EU=8zJ{&i{?X^i{!Hl%fM z1{4vo86{kOyl_Wq4BOZeq&MSlBElkeY!GRb`Po{e^N~i|K111K1Gq*dA&v5K;X~Ix zDmzyojeQY({+82(H12hu(ej|{siJg8Cdw#&U?vd{#lt=J?Ngx6?Wc?4iPRZP6v@*%ISQhYdIZ2y1_`_??)PKp)&8+k#6HO>ZfZK+3%xr_H!EL&^1cg zQ4U?(D7_dy=GZQV&wj)!JNaPlRN9Yp3a53XX&w=~D2((3BYkfOY3|p(L8Q4~_Xd#0 z+>w7hrNc%VzsIMp*<`<$(i?@lJ0xQ7i6BjV!Fd0f+Jii$@2*1{^QzK8T<;R$zgWcH z6+$`>>9B~sGs5$V-;CUc@uRi#Pzll)Ka~zz_EY;%?nAB7ad{|&{rLQMJB=Tm_cSGU z1Z8|S1?ha0Gau<0NKZx@{ZeW4J5q@>odanf>hDAukI*{9ICpkKDM-7FecvGND>`?& zabB#$`Xjp+g73a2^u>*|3+c_=4*2cc$!Q#e`^@%v;Ad=fM)hd*W>#H+JX&Y}yd&{I zp8DyD?>mrJ@s7L$dHUqpHZ1r=|&kpO~!ug`)MxnePE?(7 zBl_`O1k}~}&^&%=qTRdb73(K%r;)%bUE^r;xB~_~Nw|l|fKP+U(~JA73aHxHA6LWn zWG3!M+|lybco6@~Mj(D+22Lw@W?7iY%w`6dSVwCA1m+}WK65e?=WFFRjTvOlV9sI| zGjTmv{&Sdfne&+;=0au}b1}1=S;1V&tYn6nSl_B1tZ&6yW*xJhxt7_$Y+`O?Zf3SH zTbWy#ZOom_2(y#9o4JSC&D_uIW%e1oOE5L2i|J;1nTgCKW-?P}rZCf(=}bQ}gPF<9 zW(Jsf%n8g%%zWl#<`m{MW{^39Ig44$EMd-J&SlPLhL{VPWz5CQa%Kf{DYKFpW>zz6 zn6=D0W<7H)vw_*f+{oO_Y+<%Cw=&z9JDCw?Cv!J*53`%OpV`aoGkCXPYD^c?&Ga%8 znMurKrp`=ZrZLl*er5(UlbOv7F!Pubn3I_K%*o6t%xTOZa|Ux3vzS@JoWq>UoX-p~ z7c$G3i<#xj3g%K~B{R&dX4WuknRU#1=2~V0vx&KpxtZC*Y-Mg`wlQ}yBg{_bZss0l zH*-I;m)U3V&w{BjT}(IA%S>b@F_W1(GliMPOlSI;8O%&(HZ#D?V@_aBV&*d^Gp8`8 zF@ww*%vsE0W(ji+b1ri}GsIlTEMqQamNP4uOPQ6-FteIj!>nc2G3%LYnGMV)=0@gb zW(%{Gxs}<*+{uhEJDIzgdzjtKK78#I*WWT1Gm)t?)0uw!sXX~*Ff*C?Mmc3Om~)wn znLG|<+|M%ZM;W)XjN5UKX87Ne#6-Pxy}T#DoXniXoX;$0Rx{T!TbMi!_v|E;%ph|Pvy55EtYdCuwlVh@yiYI_nQ6>yWzEsvZOlCe9~8_) zW*Re_na`ZToXcFy3^VJQo0&VA-3A}hm`TiZW`H@FIg2@;SI9&-w_m>FVLFl(3%%vNS6v)AC$Zl=!6U`}98W0o)%GM6%InVXqh&(m$3=YBoC zoAcdFu0Je{eAvbGGLx9xu5cRX{me{efH{Gg&z!;xGG{SMm~)vSW*M`bxs(}Z)-das zYne^V&CFJ28#BV(&Fp6O8mtmb7t_m3V(QE^rk|O~3@|4!^O;kaLFO!G33Dzp#4KZ$ zGnX>M%o=7Lb1k!pxtZC@Y-2{4yP4h0UW3a7)5Y{MlbAX)jp=7*G6T#B%zWk)W{^3H zS;Cyl3^B`?<;+Ta?1A&uvas=7v5b#f{63I6&n)A0zpRe)^~Q6?GCtmxHL-mob2GD* zxs}<*+{x@@?q=>`b~AgKeFm2crp9y`?O2ZEdNA6*+{;X4CNZ*GV-_>#GZ!-}nYGLYW(#vCa}Tr6;9uO#WM(=un>mR& zjakf`&s@x`WY#hpm@Ukm%stFLgEekuGBcf-&78!X#w=#eXD((|GHaO)%#Fr8*6@0+ zY2o}<-jDT6&*?QgnGt3u6YE;-?=$!;)-UCs)tFenD(_}u{i=K-6YE#ylbJd*g_*`o zXZo2L%uHrBGr-JaPGC-A<})WVr!c26gUlJsSzQkr4a_FyM&@Q_3$vBEmD$GJ$&4^NnY)>LnBC0%%wA@n!RG{1 zW4f4brk9z>OkyT8b!G}PjhW8$Gc%Z(%xq?Wna7;KoW#s$PG(MFPGbg{GnliO#mo}s z9OhhRh`Eqi#$3!SXI3zmGAo&3W;L^hS<9?r)-%^K8<8RYy7<}7A0vxGT^IhQ$~$^Bnh$9eAmO78zk?*B^e z|4Q!vO78zk?*GbGj_3ZbVZ{;%ZzujKyY_p;P^Y2_YfH*-I;m)U0!%~bxiJTA2^ z&bygjW+F3*natFgDaaiOeKsGE-;rIIZGwTE*kE%Fp{Vn3>FM zW`N1#w2H@R6_3-ZeBM9VVBH=j_p6TkRmc6R<9@B?ey!$yt>*r$=Kiea{;cNytmgi# z=Kiea{;cNytmgi#_8axD=Kiea{;cNytmgi#=Kieaeyq;tIPS;lDV(3i3^HdK*ZbAQ z#(moA66PGX&t<=@%r@puW`x@!dv#4cbBXp=-FlHS;-N&a7sxWwtO;zKYv# z5Wg*_@-HSc{Y>qW*c*l!IuRyk(tKKX67?zFy}HCGsDb! z=4R$jX1BptG-eVrof%+GX3k>HXO=UonQNIX%m{P8!L=@CGSkn@V@_cfGegV@W(~7} z*~;u>_8NTE&D5D0%n8hC%o658=2B)Yvx&KtxtrN%@HHq zW*c*l!Pf;dk(tKKX67?zFy}HCGsDb!=4R$jX1BoxjhV#s8|RUR3?}+T&w~x9S24iM zV@_bA-)cYFr8t>6g*lCh_R@1h!z^Yo*IUAz!*=vX`ORnhLe7^lxu5v$9>Z@bvy%O} z{|z;4uVb!dHZfb7ZOjO>lewF@hs*6|?q_>1vrpO8H!jg`4}CXO(ZzH#z05>r5;K{p zGgFvp%yg!onZe9tW-|lKJmv)EBxXKyGII)Z8Z*e8!JNe`W|lDLFy}JoGegXU%rfR; zW;wHhxs+MS3^S{lHOyLO9kZUfmf65;Vs2z^X0|X}nOm7{%$>{#vy-`-xrf=!+|TS~ z_8GJZrp9zJ-Apetk(tCyX6nooW*Re{>1SpzGnv`{4`XKnCRbUe?Q^O+NjC&7_JDvT zgvGEG5D_6j$qr)E$c`+fwul(8L~x=+EHNlz#L@vp1+7t3RMZ*=`4NyQ5l2+i9z{hq zOF%^htwB(B|L1+5r@rr-={{Eay2yKOYt>7ZIyJwWvk)x%Y%RF76YUiBo^ zhU&EH>8i_Bo2uuiu25a6+EQJmdXegC)wb%Ts+X%?q1sWsO7&{hYgD_c*Q#ExdXs8T z^;Xr}RBuGGBKBW4v>Ol1|)hAS+VJ&5lW)-AuKr zx>$8P)g4r8s!LV(P+g{4S3N-W5Y@v~r&NztJzn)B)rRV{>glS>Rhz2ksIE|5soGLq zrFxO-YSp&trK*>!UZL7iy-M|J)oWC{s@JMsuX>YePxV&S+f;8?ol(6*^-k4$RQswA zsy?Lpu-Qr%3os=8QpJJlUjYpP3C_fTD?T30T1=t>ZPiet6rhnQN2p_ zYSn90yQT&3|~yg{eEnr zrYl*tp-pe5>8hr8&~#1H%QRir@`r1BN`HTnrW=}GuIZ-ym6~p8dbOt8@~_ZzM}L2f zrn{QP_^oGsYW&7-(%;{nWgFQ18T_h*Rg8ms8i%omQdD`RF|n9&-LPWFzKJJx?J^ARrKe1SE$~qdYkI) zst+meF-Pe~?H(SpF^n=&M&s(5=7O0;EP0c??-U`)~n%~m& zD%FcLf3>DD-ky)`^8AjbuTs5Q^RLl#SM^%Wzh2Wfsbar)&aIlhP4#xopV9Oks&{Js zJ(}*TKB)N*Y5HN+f#yG^X^rQCXE=X6Y{|-&xsd|s*_ci^X>O-3U zu%-v9k7@oBntq1W{`X#X{;oBq>2cMCnqSfM2C9oRe=|*2RTpdicADNnwWj$?HNA)G zGR;3k(}$~0Y5vigK3?@C%|Bh!%T=42e~zYCsIJufRhqs?^-|T#RXeIzsa~VnRlQ#I zCe_x|kE>hi0b+PJps>`x$U0eQe)ss}0 zXW1q;f2F2ZtF~3K-M$>QcaeG8zO}DaF1FK-gSBtf-($Pn>+A2eU2AK*)_z#?wS8+3 zx9Pe~%)oIn!RhO$aRnJjfp}JDFrMgP>BGuKZZPiOvFIT-nwWE5K z>eZ^(sCHGaRlQ#ICe@zmt*W=F-mW^MdWY(rs(sZ5RUcA)SaqQKnCcU%&#~@;o};=#b){-cb(QKxs;gDos+X!>u6l)PNA)Vzt5vU2?W$g@dcEpRs<*1%o@E>3 z{95NuP4_kZP?l|K^B>my0iU1Od4|*WhOC{J&l~6b=WXW8;o^V+(a*2!VR^{AoQA(U z_L8S-n33<4+iYBivR|FKIB=FPw%J)$#eeyv&nL@oz<-x~@JPP}|3mV@BmEBij(l+N zE5_=_S^ae3|3CTQ;8zphS^fc;fR z^f&9le*t~tp`TTZmG3Nn2L9Ia!9%~~tbAwsFYLhIgTC?5&rUa1KKQQvwy|5;I^P-t zAGOUwZ z-e=^4NBT2acK1f|!9%}XiTPyaZ`FstJ$>V$@Bik`u%9WLPk(U@{sHujgI_gP|IYHU z?A<5H_ngHLp*HLf`egcBci}hb8xQmIR^o&2zHl3RykF;ikAd6VU-tdCyFaUaglo{< z-xT9IboY5B<_g zW9A#*`(=*p_x{P)-g{jf+j}3JJ+`~`vh2RaT$k~1T}9{eQjFn!d(k%z{){nu%bdCG zOZ)JTkPi-i&se@Q{g-s$zmC3f@Y}}no$1^E1Npx5===W)t0(!+%->@M{;%bO zgFlt{&h%eag+HKgJkoE%e@;Glq~FW3U#~46Jj&m*0)G*Gm&6-@dpZZN0smC&>z$tS zTKDVU#PhMg$?WrSFXZ=i?=uelx03#yxqtU+!#|7LYaIM@5+B@ur+T~A=Fi<*e^t`k z&9i%3hJJoi=DLi-x|}t(&g^Yj6~3M;j7R!4_}eKT9Q-L`nf#=gV4t~{GzBBvT2mHVi`96O!MEtby-_UoK-+_Oid~nEjNBPe5_pQP| zmA>)N$NN?xpG?2rfUjpx^%D)F7^ABx!zUPj+|q>p7E)U(;4o}=@tW6P=^XXOvz z>ov=v;9-8=k3N~c{X3oy-p+oEhrWGAFw7^@KgN7Ln;8%NqSqbA^x;3oeBPN44=2bAQb&4Wxqd``NqTi%-1!^OlSJ5GS-#GYf zWBJbVXW+kAK6sShYQWcfp~fTq0sI@7-vS5U*QI`(+0VOs@O2L|4t~>EzBBy`YViNa zeB{WFUuYplMf!{zh?^m7W9or`hEC&$Oi|1##sG3v!7L6_^+aG9Q;<|JJY|g z24DNvc%*On+P@d3`OPHXnfdRn!q+{*IOMkz-&uYa{w?hPz2M-_B)&8K_qE{n=^F>% zd6LJoGyRL8JoFTOj={lfpzuNNe zqi-DYyGcLJ?B|1+{Rh35ZXEoMv9{M)KKPG%&HF*0uk9_!zXUz}vBrLkLwZ=vjf3yY&dzTS;9o5t9Q>BCd}of&hnw*A3~xO2 z^Qq{Q>3^gL|1Rbm2fvp1&h-Cv0DnN=IQY%Pccy!)$>ohSYLO+Rb+Xb=9T z%r_2x$5_5I^Dl3}*E78FDE|{s{&WEIjf3AaR=zXyKMDTR@$`*@-!+!+O#jLze4W3> z!5<{PGyP9D;9tOe<5B*n)BkKAzOK*4!EYJM zcc%Zj2K-+z-*}Y&`9A!I=^F>XXRLf@=3m{(vWN97YCOvSQUkuO55~bC7%ShI`PX2q z9@cvZ#-seN*5TLLzwyv7)r^@>W`4H`|7iNgqx`RT;GaR?c-aGa ze$80EGyQK=;a|agD%&C-I%>f79}RN8dR3 z&Xc@8IMctenq`mZcrXrr&se@Q{hRvm^`3xn@VmzHo$23f{yK(RbiSJCm*Mff- z`!^1L-&pz1^lxdvpQdjd{3&Dk&h)?2g};)%aqw%2?@a&JKKzf;Hx7O?@tx`a*A)D( z(l-u%Bk`T-f3FMwHu}cF?|YkrHx7O^@tx^E(1gDYedD1&1|0T7rvH2M z_n~h*^vi?jlj;Ad0bkDp#zVj8`uuPgev|pe!LJ)n@_2S;{v%lLU-W!v9Q|!?J@X-FF`PHb3;^Oh2z@+5hl*o*NJSylOnj z^TnBdsR94R%r_qTS>KpGnSQwre?R)hLqG2rE8m&^SReig^o@spQU1Ih{IlsB5BG} z(l-u%*I2$Y{dJn~|3Ke3_*04RO#gYkEPJ#>-+1VkJI2f>(_gOve-rw~L%-m9o3G!6 zzbk#?pR!()~GY|w}QTKVAM`?};i)8DWS|LydRgWoZpoxf2H z{zvE=2fvs2&dlFv0RM~f!NKn&zBB!e+wgCpZ#?w#sxkW^(_hqu|10{&L%-> zqx6l3eqKxRoteLBE6e^mLEkv|mBe?Z|AIFBE$JHvznl2Z^f#}=e;Iw_;8zmgnf?}2 z@LxsWIQY%Pcc%Zs9{e}bHx9lpJDFon#$%QKiz@Ihpl>|%OP)!eOn<8u{EyQ&9{NSc z|Kb_=U#D*z{GPG;ac2HDZTR1(ZybDQ`OfsWtHQsZzVXm6I)AtC!GDsz@zBo;^6mSF zkF7^P{VrnB`MYBu{*Lm&!~7zDrzU*9UdxSx-!dJk^T()cgP0^-`B_edD2Dbp9UN%Cf)Dqi;O)i_YJ}s_?g@ zZ#?vKXKpW<{k)D(ORN_0+KduFTPx{6~zv%ouu?PPc`o=@Q==?pY0{?9K#zVhof1Nad|3UfS z;QP8bKAAK7Ke-G4OZ1J0e$n&cDSi0grEfg+nK?WE)DHan=^GFIqVua^{X9$GIQYP@ zf1TO?Yv4S&DShMM_Y>cl{_EQCUqatF_`tdHr_FyAedFLeb9-}V=ATxDe67WNXk^(_8`3u(`bFpaJKFGfrEfg+%N1khlbQd{4*XZr zHx7Q)SiUp;RuBFe^o@u9M8lXqnf}F9_!rVQ9{OeH+4&!=!~YC@t_|G@$L zZ^;J-zmxdR^e<_{zl*+c@cW7HO#eeo_>a>!4t^)`o$0qLS@!gL^o@f*llac^`|x*^ z4-S6McrwSIS$h5Xa0mWj^o@spUNxpqX8uQd@Lx~gc<2{hfBv-v{{s5PLqD$?&(6QJ z1OH0;#=!>$-Ya7!i)Bj=@{x|3w5B-v7&d&dG5B^W- z8xQ@W>+M%+@cDUqZXEoEG4qq}SL9!9XW6s-K8ADfyNU12{=0Sf{61T5Jj(y~0sP(B zzwyv7+TLrSJUd0-IQUg#jgK??xeom7>GX|*-!hi(O#k{0e4UTRqkQ{J`C0AX^z-GC zZ;SGsnSXNyK0hDNjYEFlSiUp;9+rLfcJ^;P^o#cIEe-hmd^|S}e#@BoJQtY%oj&~M zm~R~XZsI%B|86_Wp5y1^xpDA&iSJDRdsFah%r_qTrE2ua^uOPPuj{RG@N0?hO#g=+ z_&R@$gWpbkXZkvh0V<{J#z0|BXI4_(kXM-;tm5cR+G*^t;B)&zzb6L=FB<%m+umo%qi3d+_5Y)hdwy?Md$C+=6{MlIQT{9?=uzn{2jv_ z9Q>m5_gTyT1@pntcV_>&Gy8w81OKn|!O?FS%XfCalvT65^gQ>Cqd#|k3HRl^v^{;^ zqZebLEGsyFOJ(y9q7RPwU1Rm*%zoxsKd++?j{YF=o#`*Yc$Utm501WP&dwk2!T%(E zaPSMx-_qJ$_}9?~N8i`Q{N(&Ctz-E=qYsY0vwUavUunVrGktLM3-Z@%XL)&T`rzOf zoWG@wVU)L_4-S68`CHo9^7(yE4Rf_Kk=REZ;pP(_U?s_Z*(@MaRz;*3WAC;F#Y^@|~H##Q^@7Zstt?g$?-pzGVp<^Nai$ z_`hTR3uh9)ZLEA}=2wwFkFN(y;F#~r%6F#!q8j`ynGcSBGs$qVW!ZzaAn z{Vl8TPhmbd=DVYQQs46V{9oF#llTSwY*m5J*LNlG$o#F^@ULe-;F11f%jf;81de{! zSp7S5dl&cMKgN7;@bknc)8D3<<@0s_0+00Z8GSxq*TeMl`cmDNWj|!*FKNKn{sM>m zQq@?#GyNS}@O6HHgI}&hpG<#ejOTovU*PBihxuh^`n#HcF~+?tNd6KJfW>_D=>G#dCUh# zzaancDfl0y501WP&dz_OZSQ~32M51YHKtEyKSy-o|Cl~F`1v6EWco*T;Qxs}IQV?# zQGUhd(?1INa)*|5y6p;4kRJd@}RT=)(UheQ@x{fMI)`>7Ql(59x!W@4Zd> z@tL0QXZPXjeg}@eXUcbG{@dVBl$j3>{#sMU^vU$!jq#b-f<8F-d?ut%mOlf35BW2r z{R^7#Uqv4r^SiO1%$fP`slw;?$xGnqcM{)Oeh>a7%zsbM96istGrRv)4fxm42aohG zgfa00`rzodjg{}relBdoe^9>9|L4zF@2$drjy^c%canT(=D)X>Ujx3L zC&AG#=>L5K_`2VLNBS4F;OqPXN8efF~frDQL4t+BFzs&sQ><1kDl5e~6o#|gb1%DNNaPZ4B zNxn1vE2{86MISuU|1`#b?d#}+gFn_cW0fK( z|6AsRgI{#MT-V9+bu#+k;OCyHew>+qeGC5P^ufU|SB>eD>EGCaulpT1_@!if$@Fio z!9Rxi;NX`lNxn1vZ`a}Leg_VIQT}&k;D3<$;NXunV?LSrw^{zx^ufU|H;gC!dP1iE z!w&rK(gz2BEa{(2|0meL>-6b^gU`&_`9G_`f0jNt`15>O`ef$c*~{|hEus$&e$n~( zEA;ccUFm~I`ge8UA5I?}e7;a%KVEGLe|9Sf0k^X&6 z__xvrkMw`tfPX)IaP<4e+}`wh*so{#^L2iKqo3@r%$eiUAHd&~`QYgHjFs<9|2NoQ z&tFO(Jkq}(+xvXo@4zGd2Ws$jeu1O!>ry|??B{_#d_7Nsqu(>0-T#9f_ydhvudCO9 z;IJ+pSK3A&ANKah0REvoX28*}7|VC2kIl;0J(j+0;&5BmX+EMGs@F^ut9f1&sZ@W%T0_mH#xb~>K-0KZhc41A!t zZkf|_UQgCPE*|IWU#{c)FXsDxFJ~3x@O7~<=4-#(V#7Y23-X_h`5U}!j{H`ZZ_x5_ zC}*uC|9@X6v97uEH~2`B|AX22*ywyieh;wh1EBtM-$#?2<;?9ZVLxtIWj|mny%>Ms zr-T27+v`lfJO#f-9~}K=;ycUl!9PHLFYz0R?@WKJ3ja9z;F#Y|d}sOAKc92TW8LWI zwdj-S&+EhI=M-gd%%6&W=1hNn4St*bfP-J|M4wE5Vg`PPJ~;RVuj9&VS^r<7501Vs zJIQ0%nfYtC;Pbh+432)qSiZCTHvBu7zjk{K{0@Ac*X6Z4iQh0*zBBU|V(x~IG9Qd7 z9Y5~O;Wx5;BR;2<7rH|~uiLWp$;@A;1AkrSgF}8kNPK7d&&T#|^dkD;;AgGqlj&C~ z@Lxh79Q|hEJIimuKUltJYI}WMliXj<^w+g~z7Jdmhy0@BbG~FYT z>o>D};|BW#W4^}09gRccZ_t3x`*j%{d|r^~lbOGv`5$0DIQn&C`Ofq=>cGE}J~;SA z=jo<(_2F(wznDHa_<1Y(;C#{EJbrG*v*n_rb)4Y2ebH&+mF7>+ zdCV+&OFU*4eR=jVvt0){1NH!pJvg)H+?hQusb~2nx>kUL&+9Y&^jf_HW4OtB%m+um zYAoMb`Ca(i$?qn9J@K9858(3|xV*&oi;nqP;ycsdz6zhO*~{RO{cK-{&+pup!ND*0 zjoCk$`8!wP{|oyE2R~~@pDf?T=VJNo#P24)GyPf}zV2n<6ljDXZcg``JQ=smnm~b_)Yl#P<}J3%&)4od6f5DOL2ORpzs>a-2GW*}72A}^Q zfigJy&hnk*H{hS8{6^wejpxX3!GE{>R`g4a=#!bhXCJ=qSzu)9_)PrFnf_jN_DSHIvm7}1SvC4(`RIQ$onQ5&|3ZHXKHsA# z*Qa8B-j4ZX=D)lTU&jwP^iyg?pG^ONI{Z}}A8_#h&pjIR=^xmG&wrDo3=V$Lcpg-T z|3&75qu()}%<-pQ_c8yVKKz^I_wjebZnf@!9S-!bm3xk7SZWz-i)1RDy&;RdC865ng>*rJ*zMcob z!OxyBWwcGm-x=~U)6=La~~Z2O5!`q@4@H$IptS*j`~@a_|9{0?-r%F zy;}_5CwbJCW&Tm1E%^PVGI(S^M^)hK*#;c_s_`Vp+*$cG_@CkU992vFR^mI$$M|f) z&wtD5_lvSY;ycqnx&!}K=7U2&Md$LdRro)p4-S6THCF%5%s+Mp{%_>ZMBg`5KAHY; z=JVhGDT70P(d*C?V7yT04mkK@6=U{8X8y?)`24;{865nA&j-t=cHr;A{=vb|d&bNs zGygRW`1{fa2S2+!`r!P9lRDRK1vkXEnKM1-dH2FM$K&vYU(tD&9EY#Pk}v!l*9(s8 ztsAq?%$a?@ww~oxy#@h~_FM3GReoy?{2u&Q$nQnJe26joASeRH_cZLs zs;(R0*nc~w49nMf z0gn0gB;T3&XEflyoZAbI{#4>S%eQ_e<){5r65m;V55Asx&gdoi^~86k|0ZJ4bJ+6o{%HTqDtx`~1kOf{&zVj5zh^(-(S8rU z-lsaVH`+f7ei#1BS6@9Y&HvHA>XGJ^uc_aE{`fne=*K;g5=Fdbw zbEf}}9{m4cJ~;TLX7tJQ-)Y;c=U8y?nK{X0EXh9~##VPRA3WNhf&X{;o}=^8d3OH0 zI=G_g{th0Q-)h2t0rSDp?;9)MncMsBDfqk72M0eNM4wFmJ$3kc9s@_ek@(K^S9RdO zj``r|R}$Zu{)JumE9iqq`tR+*zl1(G_?h!$jydVS!&81=3;q}AgM*(}jp>uw&qW>h zx6lVizhNxjnf}FQ=sf{&@JsH{C(~cufUnn~;NWM8PnO?<&+ny|SNEcy7mVizalCE4 zG5ZI{{DCq1;cGhPUxNIt^%((pr2ir8udVlDJ~;ZmF6BEjzukhb=P_{f`^NH}>3_HZ z|BcKC2fye&sE-Wbzl%ON_@zb0%m?RN>;L)}L`ZM|rXajSmdCUOQ_baykdc2Qp z{h00}kD0?hFGJ2Ydc6k5e4W=#V{MnS{1*H-u+Pg{iQi3pXZjzl!Pj*X9P{gm?<~Iw zU++|O8dpO|WXH{eNLuUTxd+_zT z3>^HT`_30;;NQ>w!O?ft_Bu2Fi=8ZAqR;oi!7sXxf2jd~d**|q-!)eM&dmQZ_SX`< zZvYN{X%Kxf{jb7UasuYU)Px_<4I;Z%kRVgll*?-Hxu8P{tei!?R6gk$NWm-JIilm`3}!# z{tb=9_e}NUEPn?6i{;NmKle=fWcoLv{~eam2giOI#>#i5e^VX4&TDY+ePHC1>3_?7 zJ<1iuUsnA%Gymo)e7!ybN55k%-&uYS{O z`roa>*Zu_uztk|MPp1F97W^sZgM(jm{M^=te>#0|^nt_t^mzEb`P#qW;AhR~liAM? zVC?u&=7UH3P557y@0p8jsjM)+4`1i|5Bl(i=X*gvKb(TE_us(L?;3MFGiUaHJLc~A zXZ8b*ekbvr<#%u;D#`cx>VJ^<&h&qT@!UzTcfcd_e_VsV6Z65*ZzlQ9%>S|VbFlo* zX#Xb__@~kbkIer`3;tW=w-Wy*<4HesvYX(%cbhWiEWEY}zEbyy)4^ZWH6OnRvD3H2 zcY^N_-(xw`%mJqNf}Nh8wmJ5b@4VCOd%;W{^Uq>$U|8H2rR$B^8+q>hom)x%zt7J9 znXOl!m4HKjIeG0yF3A5!%&*mE=l`Ob&k857xWOcI15<=FGj`U3QJ@ z-DP_AdhhQe=d)ZdIIOp{)L8q@xgh`AB>%Uw^M6~-@?E!LJ~-s(^_WkdJAc<*V*ajg zn4SN-2J*ked~nF0SRM1h`L5sMSk-YZ?D`$?)#ene_x5DH!{34WyZPK-e;H)?ZhC(M z9M+rN8P`jmJAb!BWBzXEX}gmA0gi{=Zs2x-Lw@PTO=h#TNvid*Iv z^ziH0!_p0B_wZL-LzW)T9>Af8?2y<4dG7qBXD0cdnj^o5d_6P#wU^}k`zJj1GUtN) zhhzRrwwRs&81i3oGW!R|{@4*D0sl{JFQ~rI#h^`jNKfN%OfaPj<6>kBZjSP1fb> z)wVdx@4?se|C7DMuNupDmfwfJr}F#eEXE)BY2m-2?@a%x2K*!FgQMRwR=zX+r>pQ^ zLmwP{-xm4K@@L?`UH(ksw~ggH(|@J`|HJgbF~7(kz}I#4nL+f6zL)ZxjsK0z2Z#KE z&kM$~4*VaxZyfycj4}Hsd;eo&P53<5jHBO3d}sO#Y<&LCd~ooyTJ*{E$6>sT-+veb zN57Kz&hjhpw`Kmg&;O^#!`OHmKJORCF~6DQJ2QX6`Z43upRk58%It`QYgLvhtnjuTz8n3HspR7rb5=Tc-p6tMWUE-!^7`@}0)9=UM)L z(Fe!;UgA5mpXXWs_sLKCFE}5^p5KK36n${aZzcK8%zr-e_vHJiW8mm_65pAAr43)l z133Eq#CN8@F8bMXKlTF-e(uXoa(_9~UmwPvycdswgI{z!uU~_ICiB6;FFP}z%>0cS z@ZU!t9Q>kwHn#D(f<8F-{0#F>vtnt}%Tw{Z0Dtzsr1Z^m~c#O#cNP z_;=F>2R~~VGoMUHgiW51+qNGX@TRxgLEo``MuipP$!{frHO`f%w%~6_ z9~^vM1C{T6(tk+>zK#cQ@bkVgeKP&s2k><~fP-H&o_k_{Ejxw%fTQ1v`DJJ3@7;y} zHu~V;m!_gmreBA#jPGNQfrCGm_+67Un-iELH3po1MCjPZqzV|{s>n;axruSa@ z;2p%jF@M^(7i8?kXz#ree(PzNgYU*aWq-pSrZ9$kU&n0(V?K|`qGRS&*v7r}3sh{!?z!OT_Y>cl{;R9-cVa)_ z==-|Vzcc-l(f>X=N5H`^x~84dg0FJ~9DQGw`MERmPo06Ua|9gynz4Lm`me#l=?JZUKSFs;(^rvEedc2+8gnvDK zaPTMW1&qdrJe^|>f0FCTzCViBllt)Y3ZI6i>&bboEU)V|2sq@khe^*&`&l^yU#~&H z!RK=zeKN=AofY^i**`e?HDmeC^6T(*zPz)Z_`WXr&h*c>{7*68`QKMzA^i+rzxOab zT$i(!wQYG&%X;QwUocO6GW}K?{^Rt)VOz=rWA;X-zp9nxFX!i3W8mNy9UB*R;p=%4 z9Q>l^`HTASb?$(JpZT`1A2R!Szvb`4{=va7dj7n)2Y-@2IQT{RAHev$obPXpfumnD zRzJ?{=L44iR_24F-%osJ`l~ze^?DW@{G$FpXxsZS=7WPj=F74lGV?z&1^*iQ;NZ_| z8`CG#|5zWsuD#&k^SuuGWcru4;Lk809Q>l^+bag}^}GrWe$nyP>BE1L`NsP#oP91l z-`C6D$n34#fPXlb1&4L5-!Z07rhhBu?sp1(aPW(c?eEs$^L@fGaPZ4jW9E~Ye;fA2 ze(z;IIQV10p--lNyZL(W0v!CJ*8)GP!~Yud!NFh9FlIkw=HJnQuYC;;{`k`9gY*4< z!q4XLPmJaJ{gHeF-v8Wxp7=I!RgC?+|6b%9@ww0b$BMTDzlHpt$lQOm_GNdOwYOP2QG-)e&7+>_GirJx*lj``GFtjy1-#w6Unxa=|7C|KTxk>!O@>Fp7b6j zoaz6q2meRR2M2$=5q&cKe^lZBo<2DGgT!}sf8IFu#X)8Fjf1~wKl)_)TcZDiHl+^^ ze!+EP-mXpfd<|b$cE-`0E0PKAHY?=D(Kt;OHmgv#vA!?_qx({0{oy z;Fmha?1xPM2Tk}F(+3AXzb*RY={fiB!5@$N_u%_x@88?&S$@dY%m;`3QZ43_+0T#B z&mqg`gQM@us()wtGhO&c(FX@V?-|o4)BmaEpFtlS{eI#*)4yX1{(I<1kDdEMxf>Hnz%pU;r_KIXYI z{l{DI_hA3v=pSt?-+AtS4m%|FbJ*(H{rs(u{GT!(9P+bj%qO#-zr#4}e){0(C*#Ry zF!|WOhw=S{d4G4u4levu@t^un^X>ENSFFwa|MmHGCGnk^|3nr3mhwGQ`9(gChga+= zzh;^82T8s&^PjYQU2nnBuP45<{04l!|1j^#hB^PdpC_B}&tgB|=zHd5jyYN8to$x~ z9nbiDJo+tT`Ofs8vhBT$`QYeJCBC!#7W}K_d(J=a|EV_o8|1f>{7RDVto#mqKL5;n zs+0Kj#CMk8htJQ5=RMUohy9eA(I?Y?b_)J;><1kD%z2XI=`0`p9KNpnPW1D-F?}-q z=lbwu=uUm)TW^mRIrftu{&!xx>}86srSsRXXZb66E*oP$kB#|#WA;X7Z<|)(pUB?8!C&aF z7wD7c?&p=w*v~7kp54zj1LX7j@bkeTKl5>BKAHV&3*(i17M%}{{+O|R=ehftEXRH( z_nh6&w%FH`E4jVkm|xUS75-}Z)iv;I@UN6#OZ>L6`ghj$_Ar;%migQEqF<^;pIorL zHzeEp=ucao!CxVNY7P7beBS%!FKHyc_onf5=JB?q4PVzHFvff_{=iQK{|(3AS$+pTU;EEr z(lKX*--Z8K_1|3szX$&-@_TFG&%ozr0rQv4tbyN$|83>>*T5gZ|AG9$Xn%W*$P_gGc*S_ltd8V!{`?)%u^O{wZfX!`Y-ASV|(Q7@@s40*WuqOzrF_k6nwtdJ%5L(#P1qw zd!0ExJ7VsU|HFLn$o_Y<@qAW(CGqRV%6C>i`gzra{InlmR=%_R2Kc?6A4B+#-i1T+GjP`f3{tsq8cw|32S^s>WWIlMbZ~gP% z5}ChKYYqH1{N?JWy#{^((e7-L?9}GvwPe1yZGyRvsIO@&p2ORvO{5@Lm-%cMK zd}gwrH2-A{_^arHgP-?})xR_Q*{cr!L-fJXA4`0E26xma`8zfH9dGle=e)Nb^@VBt zrT^qd{d)Gjbs6^E(KCN zMv~t$mhUXT4}VkneRG(fUle_Ce$0#Yx$Q&XJ;e`$4;2r`ezOZ-*9~y+*J>KmC(}RA@|Q9n9DI%^ z{d8_=`rJr7t&$s+H&v8{`{3Z` zRpZ(Hw5ss=+2VX~@Uxldli7a@=g4vY%6`DXFS>_b0OPn%(FX^==>35UD)9CG6?n8? zh5sMQuO_~;#?zVoUr>jCv;2BCI)4iO_vKGTzYH9XCz<&dn$O>-m=6y53pa~CI6v-B z{C^jI<|>;%?S~Y|*o)C|k4HX!iOvNxbuN6kndQg7iM@d_f3YuH@^Ry~liAz9w&3eL z1qXlZT4Va){CNHUfNox7^XKmE_)jLi{dD$udU-v|PtbV^4(lqqhkhK}a>5I_E#Tm1 zU1Rn}=C*vI3jf9Q!O( zxV>Y}^uJ*KN0<)|es+8G!TAZF*Kv;TS)K3=u{+aq9`h&M5|67Bp44$=Czy`;t2GW~1o@U3^>WpWkzv4-Wn&&g_Rw|2Hl8-()^G_}N3o^uhUwKhm+(2j3<3 z&%dVUJg!cBFdkR0eu0jwG0Wt7?{8-Lt54y2!C}4peizqErvJwl{B!7oqu(=@?@a%% zb@&(22M536V@{v!{(`dg^Kb4O2fy4mrcb870Q>#bH_``3KglmU(_gCv|7Y~U!7nw8 znNOy_un(W_Ei3>>zn=Kc^q*hN@{`7y4<6~S+knsKv<2Yc^WMsS$jslse7+aA06fy) z*!-i}4>3$Z%Q?@a&jE_{9mX#qI+ zrHi6Zo}Tk~KIzNxcs}WV9nbS^S>_*6&+?P`ovsDokZ*_lupcu0qs-@Zbpbf|n>3uV#!E2TU zA85hnbE)x2|AW^5*Vzv^`c30W-$x~9_TR3;zlA3_QqpPwTy00*DfM*3v>-^KB8iq3a%@E5g=>67W-I|KhU><1kDg8S@( zU-#jkMIRjeby~*ECo}(%27KO^7l4Cb@!sf@=|9_re+l!!!5?#`Pj-L2Wci2J`1|10|7;E&a#Po}@95B~}J;NX{MqEDv38TvVOefr?w z|DWqse(Dmvm)L^8FZnRzqsgx_ek1urWBuDxuQmQSpA$a25Ul6Y&*HV%sd_HG%I4on z=PLY;z^OkYf9`Pb{roP?&Hg%WI!A~6NnWp=`ajcQZe#n?GQ8t)$B@zQ@7AFV&5iPo}?h5B`61%)!CW ztH$)n^tb85f0RBr`aNU$&h)qIWch10p$`szsbx%`Odp>|=dY>LPd}UHa|?Yk{hg-Z z^Scn^;Eqh9Q>m3+@lYl_w;da@QcQC8IHHtzLDDt4u0M;RzJ?{ zXYV%r_tOVQzmxdR^!LShzE2YxMeOdX=^!M+<*YOFCK5*E7 z$(jCv@L%@=_79GJ$5{E!^bcvkKY%_s_yzZ%@mI{i=QE6P@QaSmSJvTwnEBw5{$v;a z*XV|2R1KMaSo>s_-9UJ~;Y4W9H}1%s;A+cZ)Qh;NTY>pT{=f z@5g*_@QaSm6L36CznMNb_(j*x6S2M1AEXbCe$!a}JG1|j8t}hN9~}Hr-IzX^{wW>! zIzGX{&#T7Dccy=85B`Ap;OINccc%ZER+hhhWBTCW7mX+GKKbkSq3?I1;WJpxmSsN2 zmicd}!RPyj zpDQpvr(H%L9Q;znSljE&e%{f5{|)-!==T!enf^Pg@b9J%4u0;;d@}v>>+qkW4~~A% zSiUp;7UsTTTl(PO7wz8*8u0nv+Bi7)0f6@m>zh}(tEjhEF4|L)4`&8rL;1^v#SNF60biM~N4vxNOGC#e3UebZT3;O{F zztk{RKhEsu!k`_|Ejd(u98$eQ@xLj?b^5|1(z72M53C`22bw zzK%C=@Qcp(Yp3ApFeM9`I+m`2S>kW%zo1I z{mwf4-ROgZUvzx_3jLhP?;ebUqu(=TetJK;8{>bb?!VyR7agDXw&C-$`*Cpai;mBJ z2fmIsaPW(+pZCK!^Y7eVaPW)9^TA4%pQYz#aP)h|v&ZvyGw}JD?>IR4c{TcE9uL1C zz;Cc0aP)hL?@a#>UHH2Hf`eZ)o)269e9w6t9Q>m3{7V(S?ib+T7oG2ePL{v9%>Kc_ zFFM~J?ZM|~3gh7D_l-54&fMO|JMdr0d~oz@iSJDR?->6#pG_Ye{G#*y$sYVG>4Sq` zbiO}RhkqM=aPZ3wWA;yGKmX{!*Yyn?{DSj+BFFw}^8GI3;1?X96Xh!Wmw7+N(eD|v zpX7X>nAeAYDt&P9^JF~9-v7h`>*oUc;OO^^nV+2R6XO{FChxz-!7n&IC)TdPzk~VU z;1?X96VIz>`CE9r83#Xa7^@#=_W%42{H>S|4t~*iuG@vbKYeiYd&bO9$8&=w{5R4E z2S2YypUi$XY{TdG)hEEw?k@UgQ?;C48ow>bR)#1OLJ~;Zd#CN8@HOBw!PtgYl zzu_D zF!!zc{|-DofmwVlFtKADIefM^#{9+Z=NlMvUF3rNpTzugCQidL`0QXUTb5(BQzOgI zIfB~`#(d_lHHi7-x%1CCCCUHD?EIJESUu;b%m;`3iAu~Tv!DH}pZn>9gFo+y=#vZj zc{KKO?hfi_ZCjT4hamr4-U}wcAwTOFb3DoP55?SbFJeF7=(iK!S$-S7j=e*DKF2dV zC-I%9r{L#LfH-kxS3z@wg(Z{mqa#?WPmg}RR zInUkO+g8P~ecO$*dz67Ux%A2OUo!)r?;B5mgP(O{KAHY& zTk!c^xCwCdeOcyb&h%err1CD+>$#<6DhtKEaiP!ZLzm@pT^rsu}Z(u$+<~yq& zXZbz&KbGH1{I0QlXZo*i!oQb3IOONm=#%N6)`tHF`rzm{65pBr8wT+IMjssfEb+$9``9(;c8FmZY>`uU78eKP$s(Ekd)Zkhnc{6X|HXZmky!QYqt zfP-K3+_k(5pT9RW0giq%=I74LKdTD=80Le6Kd%yfGX1yK;J=yb8WaycqmnV*LAiD`vzyfbSCH zbM_SviVpz)Sv(EazcqLBRayS_66gOXGT**XzejMb^)t=m!TXHYy|-_e@L{LH!~Hb5 zzr3x2oDXnJ!1(*cmXPIL`$OC4%rXC$9{kVI2S>k__|EiK4B+dW1xMdAXXn481OG?N z2S>kUEZ>>=E35GDp$`szX(sw)`sZ6ef1wW!{=BK^lc(n#&v#73@qEX=8qbBcEb~{@ zv-}Ry(gw;}Vv(eE3}cc%Zr4*VC>2S>kQ zEZ>>_C7632KTDke2S0x(`sC?3_wRYf#Ql5T2T#NDIA4jyIdtH}d$(4Ft1`g}W>c-l3XKwptb@;kpgQM?#%6F#!(HeXm zd*JA|jO9Da@4~-^+y2pR;@1=3Sw6;U<+tSfdU>p7oy2#hZ=aj2{5k#fbCYZ;@tx)O z;Xfk3Z;tX?iSJDR@{W1HSGZ zpKO@Je)7KYr1wvze`Os$-)EixM}I2uo#}td#z)sWaPUiw=#%Mp2JpYb{=vb|d|CEG zrvGm(_i=O_O@ z)%l;-wQC*w8}{}eJva|>+rgNxV>Q{9bYIwKSm!@VKm80VtJt#ajm-RO8(IFYwd6OF z{HerumfwZHo&0X%R}pdcH++OENj-fOC>#YAbF&`ZK zQp=b=nf~>C_-*>&;Pd>VPo{rE5B^u_gM*({jp>u+_u=c@xuKu<1kEX5u@`Z^GB{ zaFfsf=l$G-{#$yk0LT2PB;T3&-?DyAU_ao|{uF$EW;gLI&rv@!Nxn1lZ?3}EYZGwH zuP45<{096h+0V@lbN>1E-rRxzAM!hi@4Zd(cy?C4?JvF7zIl-N4P*Jv^#9YgSI?Q? z*iS$4o$2>#@SkEo;OP6hlbcb4CRujAp{Eps$J?#$u$;lEt@ z{lxDY%Xen}Ep7O(rVoz!oy2#h{~c`ayY*fTIQaQg^vU#ZZNa~g`QYGZePi|GO#izL z_#OJ-k^Xhj;%EeQ@xL?q%QaX88rW z{)406H&#E+%>Mz#{{sGA#soO}oy2#h|3i%b1utPg;L-jJ{6po>MBh&o^+RUA#@l@LNY3ZFtH^m4TUH*C6!7homGq!Ic1P^ZaOJM(*dEEaqcC|OUNnz@BMu5 zJ!@S*?SHzi*ZXn%u6sS}S;v_@&Cbg9PG=r2IZ$Nb-~?_<1g$H42M zlaOUOewyR|Ac(vkKd{?B@8*p)^B>B1UgdaTH=pw4tu>!QUhgj-+PaP>>*gJ6=6A{b z==}vQ^mme;yfyP5%XsvC47iXtwr3Z6Sks!%8fO$gQ&IY{&2T(boiCqYJfrkk9WL~D z!k+P1vwtpyd|S>BT*#ZWo2QxoG>ZJ?%)@Rz?#WwgK7+hIe}0;A^F?7dPc#2{9(jFl z0WS2f>U{q~^3ymTxR5t?3|%;%*6jaf4EYzChYz05BL9Zwvz~lZto^Oo|Em!4`dSYz z^mptSn5UWlI*B|#qh1QT`IuPq*39q5_CBEZBlw{CZ=%TS{RnpRSxle6?uWCHMri?SXg#F<{zN+(OpX5W#!)`t+=J>tWx8E`T(fo{MDO|``HUEEL zenwxy{%|4hq&)qtxxIg4dq?+T9xmjoI^OwH=>@6RCr0rPMn?+c5Wr@B!9xmj4G4Vh9ADb}F*fQqfLf%Qbd7Ax?!}!M@&pcen`@lkfYvvnB zz76xRo8RTh??R?4e_pwwJAAGFyz>9^nT@fY?;#&Mzc>2g=Pxy+C)e9Bk3M`4HUJma zYvkmwJZ`Nk?5;%>^$PocqOtp3KiJ`){Tm_kAm3*T!1%WYT-L6O^Xxs38eu#S@_mv3 z?B;V~&0BN)Cufo8>*4_H<|Ceb1exD;uH?`6dzMH?u$N_D_29)|$s$jpH+0 zph?z~w`0)$)|$^Duh--zIZxj2>F+nrc)uQ#GJRFd?Rd}6&Bu4wxveRAT~{7`9@TBh zd)8IO*qUO=@e7%U@o#!u#l^ZU*6iOD`(pfB&D*->tLmRXp6|y7nkGE`lb-(8?0-rS z`R~{tcE=O*a z*9E&{v*XmcvgX*DCy`&R`J^W=6J0sC_^ic*cXVu{q+Z3?K6A(RP=f=EEn}RA`s%te zo^{zd(Xm-`Y~e8S_c9N=+hUj1ytU@@$WPFG-jgpEYu@_6Jn>~=UdCiyfU{}=fL@=Y|K@Z>{c9gnq+ zCx!fFnomil0setMA^h(^`3&-W4Hal7PLGl_|LC$#1pivOU#z*Vb5Whd_df$L{!P~v z6YJQlH6Jt1BYgiVaIUR0@8sM(&3yX^@_L-ZZvQIgwtWx>Lb9xGueFXJ$KGVVe;a6@bo*Cz-RqD;{uK6y-SOLXX@6_>KOfsWnLiH- zz-~Sx*1R?I9fQbU!TzwDk9hLdnwS2!Y2Mr4F01{mH6KHMq~^sl4sa~lK3vv&&A%Xx zygqlqg|YeTxMPEz$v^4m1nL@RN`USyK2nW)?vyjtt>JEJe2>r+{cfV(J*8)bgMadm zz3^B%Q-)O(s#Dhg^Llb|);Lpx+(x)C&Z@5MofF7Mn1|hbMyzva%{jazg8WU)!*1Tr zv*xWek9{=tNzF&ye9>Sr^K``lw|6Rjv9tbhrv9$md#EhS{+D8Vr|B^UyW`1-bv)M0 zN0Z23#qq#}e32cqj>nq$t|{biVID5zosgJ$n)z-S=J-U*92ewyRIK9Bqe=3zIV^W?3W?}hE1K8ty{kT(f8Pcwf*6!{mJhuyqgmg6zj z%-%G8G3rPiOR% z2KJ9LW1*g>hvDD#JiP_;Fk>Ib3A^hJigldU9Oo@Dr4=4vLakM(2lS|NbH5&to2T`+M@nTJve-duTrG$p_v3##-|klYxe;Y>d=!5JJyW`1;yYQH?)_e~6$2D*3IzI_d-kSLVG2~xk9xn8E!fu{sJ}&dQ zm3g?3=ee)r$x5C1+ok`v%)@TpE~|NK&Et5ORZa7GPd*{myfyQ8#F0OedD!h=RbKk* zdx>{=`ujb3y5fN6<1Ei-wr5S#RFS%Xsv826o326zlk{HJ?EK7mok#gqwHl zvdq)W561Xs`i9&|jaW zVYh!3+dCwQ{6>x+cJmRjj>lU2XOZV;GXg`hZoVkv=4s}KNq_#GivWDk{=?9Jj^TLV zgXV_^k=N@dT*w!N#2i1(@r(!~-+=w$Lf&}tursH*zF#y&G6&ulb0Y4(m@`uMMLo&u zx}xawrmidMuFFY^IX0U4kvZf)V;)AP0sdi3Q40U4+!kx*A4nMIu_ET-LcXeJn9(uh zFJc~c^LA_;53k$oKRS)PzCQ!I`IK1m*36H=_CEF;`@@BNRoC_hbI8BJJY2~0Jq_(2 zkvjX23n9OkdDzWcYu;M(5#v05wB{rKA|FHkV$H|?MLvPNzMnHL;pUx?nB$>2p7AN< z^_dn%hWpnf#5#U!<|l-Z-_G&CZa(PATWcQ2_T&0v*!r>$CCXtedaueXyw^SE|1?ye9LGHD z=98YhwdRw^>$CARTi5+-$EN+QnV%j*USG?=ZvQIsGs4L0YgqW8`I$&Osjp#SH=hyf zc&s^|nHl8yxxoPJ<`ZJgTQmP?#5nWxJuBGFS26xsLFDzd671$}&wuuxh54MP*Jt>k z`PtI{QtmI<&F940-AnKgXS{1Y;M zeGde7^I^|;tT~>!5#-l$Jg}R$>*Dr$-vfD4w)cJJ;X>Xd#LUy|KQE5__sqj?KIh3> zGe19SocYz6hYNXM%FWZvFTi-_*JU0q7b zs;&<&hLFFOdAN|TX5Ga>#n9}(D1!W8=HWu#$%&b#nO_`2{t4#cLcXY}n}?nGoAiB~ zeNwNm>xIPj|3ve5xPI!e-l*WSC7x&XCD<2F>CY}<{PzZS*{a62ER4Kf8{tB}C@{Si2p96ElbfdxJpQLrp7DRA<3C=O)&6ngJbeu3YNhz}QTUJgN4KRoiGSCz z(Oh;ts!zwcEL<4dWp&&<>^%K|z9yOnPt^C#dcyP7F?g98@2x$(S=|TzRNW8O?=;9@ zoC|7deGnW{4~AQ)hr$=B6L3%UDELdgA?o#TL-i)Oa=n}3%JpX9 zKAPD9k5cc1A6M^!E9X21>-S4!zJR~e%x>d6SFYXzSI%=DZmIRXa2NGH_;&T5@ECfH zfoH4z@M3idtm|D<4)4)=&^XWQcUG*a10SRHy6~Cm`tYUd5PY+`0eqjj5&Vd{DLhXd zh8L+@!n&{5w1V}!HP*C-f6z<>{!87#I4=a$o#3O@o#AHcD6H=fujvk7uJs=9UFx2& z{;t3^F}QMU6|nA?HGSa9`RNDi@6lKjhxOQ4Gsrj#OSR`<_%QWQxPdwWht;Ft4(hS+ zW$FoVOr3-Ws;9t}`*8+bxgTf4uV^L(Z&J^LE62G2{zL1}8|Ov+oX?sx+(_$-;5Ot0! zx6*uFSkJY!_2KKZ9)jcQ2JrprM)0HRrtpjEFuX?H65gS11%IV(4gai;80Tf5x&y3p zwYC$i-~YC@Gpy(4+9-U1=DWi^)IHz<>YlLP7uLq$samgq7pVKd%hmnhE$TS@wR#X- zIfsLd^NQXV)((YF&`bh8OFas{L_HR+oWlulZ>;iXzn!CTey z;BVCnV7*_gecm{Wj?j7pHt-3)KgdKRwS zr#oQ1hpycT|D>5+#(CAR&cU_RU%*GHcf+Ts_rT|>^RS)^Yxlx8X?-7DIp#m%@vN^i z@Dpl3{HnSHep6iz|3@8!^XfXrS*-Vhb#>v|TCWf5v9~S+x7Kv` ze@rsmcADd9oGxbv{=2c3tbCC_o52`%S)7iBR1 zjq`tKR?Kn2&hkr6@}W|r2CgT|Z&Kr2UVgWZXSU=IJci{Dx?@=Wx{l!($#V=Bq5lfL zKUoGB#^B_{90SdK=QQ$1abLiNyvewEn)yrO$hTr1F6150Hqy*r8bSVQ=HWu#Bt8AD zH80~Ipn2Pqb66C2^EC5arT_iR!*2heoA(||U8Bf9qWP#NpY`Oe*}q!|`320wh5pq% z{b}ZVgpps#JY2}vjETG0Qyq3zY}V^=Px!r)YT&=t*q@M01+SSPEdP{0&WfDtl}GnR z1+V>&mH)!^_D&jS!*2h$CvUC!1oF>lKH=v55jRgW-!Fqa-{&ub3;mt2o2QxYpGTfQhbn{J ze9n`%W_~~x`Oi5XxR5t}+&t{8{7J8$L8(_9aNn(}=I*;y?RDRUB+qrlBgR?9pBa_G z?z%kNVyrbEM?S@|#p9m5UA7CyV6FKy^89&vSv>9LeHk(HH1mU`KmVRf8SIWH<>tM| z(w#x%KjwH~H=p$6t=a$1lyO$;{Q`FLX;0po`MaXX*I|Fy%_lv1Yt847Z>;&8o3HBF z7>x0+K970W?H>|%;e1-N|KKq4{JZL9a3Sx{xOtlSp?TzQWq-JkFG{$1n)%^zmJ=!!g5! zG4NX2g+1+DX&&2{>85#c-%(gd|LC=d&uLti=CTveJu{Ze!tT0KVqKTD=2OV)wPk{> z^IGS~Dm70Zc-u1z-SaW??LW62KgV>|@IB`;@6R+%%cl>@&-ul4f zS<}TG&zkW%p5tX%?T_tUlhytyPk*~EogZuFAC~cd!aVGbCoa~!wdSS&|1|IE?}Xeu z&3rOroVEHK3m5wPqHdmMeo7E|{!Fk8F62$b&C{BXA|K&+rr4eh5HzMZ?dECbXQAU- z{tT!LcKavXys_4N0(rhqUN+0t+5i8H$60$1N=jVxC_rUYaM?c`AaxIv+@Ve&kiBqlX>`{ z{bytT*Xc7DT*%vjRGwcbSB`&<Fd{KN&|}pTXclo@4muc;@Ah*YgW5zjnOb)wwyR7!NX8&hH$n)>SmBEF)Nr;)JHJ?IW?|09p+`N->^EC6% zCy>`?c(~BtNqO?t%r6Wf-=EtHyZM-y<8iE+e=&i4f_b=*uj(~II*7a;Kd_t6iP_&+ zvwu2|{CxI@-MqEtt(ku*hy1I|!-c#P5;IRT{|c(>UuPaJ8*A@9qH z*`H?r*J8-;W`DSl=RJsdTJss?_iH}m=8K|Y=4s}aVLmtL>v6cyzpC?nx#Uk|f4Go0 z);b<*_Fo=CUSAi(g?vd~%skEfdg-t4;lPD_6`#Q?dp(7`zV?9&`9OEKKV4xr2~}h& z?Ei^2c;4gMuuSj24dlOYJX@jH_56kLZ}K1Ur;6>}it)d$^9dh3A3|QASGR`#MLvwY zzR$BY{4eqms3%_{=KeC)2cFN@XS#Fydgb3~_0DI^I2(`9 z{xP?IS;Xy6bN+Xwkk|QvF$T_m4f}k{@xabT{kvMXXW;Yny_6iRzf*o7mfYBj^?@o^BZgm33~?!^07nA4Lxy3hVo0gBQV< zv3^e+?x&sykD>3q8lFoJDTi0mL&ZDQ-@y8J=&L>=$Ph*dH&L_?J-;+Upr{*)Bd`_%+Yv#X8AytU?I$n$gEW#7l#yyMB!%>RIW@m5pzhu!}6z1c3jc47YCig0d+ z&xSA3=g&s)_3EawY{dbub#HmT_xP>!Kj-|11p54>V}Li8jzTm2Q+eG>GYXcwo1GO04~@ zIsTvW$m{C@*v-d0d28nPO8@KGA9nKzPu^PdS>*Y5c+2)?J^7?3Z_WJAG352R4tDzw z_T;TA4tT7-J;|M)x3~Rsetymw=bghje%S3F_w={scz(h5zH<`uu$zy0^46M9BY&pm z)1G|7lecF6*D&%IFb})^tIA7%eXjo1)87fnvR&+)(Coi2i@d%rgWdjv+&q8pRmB14 z^PT(L`Fv-k&gV(8Ec^c!HO>~p@xyNayr;i4^S?)s*Z1XMH$TdgAB9XKeV?iVZmZWQ z%+;35)h#7|;4yEBxntfk@1JA-9dokf8;%)v#}M?4!CJ?hLw=v;bDn(MlecF656nqc zulaDHzc1wGY3BFGk=J7qF650TPisDjd~=Rxf6~o68F3dL1J*WQZe%=suSx9o54w3i zmufzSd>7lloUaiYAc#LX{IBvFV$Hl0LH;J@;X;48j8*1o=1V0%gn77-HyzwO>}1F5 zJqyo2+3D&X@RRx;%U;P>9Pqf!dj1}CcE272jU=yQz#MMvsAKTVA)gJpuxHql&mhn9 zuDmoOb)A!lSo7BGA3$~MQ1*x2eAbh<)_fNE>6*87?H~2zt(h+iA^!sNaG`${KT|6& z&m+HqdAN}OKkr|m&i*yR$bZf}eDHkSINSJ{-trppf00ik-$eVTJ^6&V3+LaOnEo$8W9qDDuy0 zKI-O+z{>5VnXfJR70knK|Ad=2)|$^EzfJR5H(%Y8r)V0`uk#H=4s}S$sy1CW;tBQ`}etd*x7!m-WTxNVS6ui zKlmQKFSLTksPQ^z`%HC2`cxe7TCx3^3j9a=$Jt)_-hN~JyPgXtU~D^1<+i|uu~l`g zXb?o6ueHnJLf)4U>$Y2S+Z!g4zl#0gLcWUk63cNJb9V5VO6=xCV)i%I?B6JaJbzYF z4!ik?So7AJk0C#g<7pI=OauG_f8zLGW!_rzIQDid)qGYmnooH0*36%bV{Zpvqm{#j zykpJr(9AbZA+N_OT*w#Mp3KwCpAtg;FOCOx^Ler6t(gyFf4$3Rl5)6^uN8CiH1qA^ z$n*0>yYJ?7zq<}Xbn{~hyiA@2){bv)J_ zPgnGRFTgxp$X7L<%hCV6W0{8!n(vW9{tV{fLcTO4=6Gn1r&k8~iW#Kg?g z%nwW<{}A)An-6;O*31vWvAUD*50t}&yxHyMVQ1$C9vl0k@CWMd@NRVvc&|DJ@7K=@ zjgmeGp4$&0fk=d)(HkXSX#Na{DKv+%uigD5g4E!)H z-}hBCm+qN>7t!)PPDPvO>!tn?-9H5XNZ%1Q##f!j`?tndmzM9E@HL}{N8nCssoy{+ zV(?IP9-c;z$iUCjBg63PYN_Yw`=jvh>YOotJqAXlVO{S7Sk|xWeL(8HnI9d3N2#T* z+dd`%uV7scJ-^QXSgG&TdLDlV?-2Sy)T@Q*aZ&gpbr!Cm$4h;rTIwl!g49>h4`E%^ zcB)gb&h12GigjNWOP2K#^7D7 zPm@fZo`HJxV){`7A4$(brn+wL9Q3cQ$M)lrznYmRqVR3>+!U!krhTyyC#Ys3xzb2Ul z^irwo802SyB_FcBA_wb!UxiF*IqR7Od=kAj2J3mZE)Dl!eLa>fjnl73;c@gv$;_qS zkh&gkZ%Td#>zh;X_w+l+1ax0yBXEfIZ6UZ7y&d^LSNdJ4>+$ej4%YeKnSu3q_%IJI zX8u1B_#HYY>)K6!9yg}U&|i!782B~@pT_#0G_1$rcX_yi^&ccNjLu`dWz*;%rB9mP zYv4`v&sq30`qw1HSoif`=u>_T>wl%;LG=DGJYFr!&ZGZM z!pp54x&M}P&K)NL^Lp+S#qa@GKQlhmYaB)Ub8t(#S_ZzDu8wup;I=y@QFsXJffPK2 zE|dIow7ic|V?A9{>L1aE#NfU3p=o1kmeF-0a07J?K8HRm33sOt55u>r^YAG82+7Q% z>!#sFw7fR2`4)X-0{((NO7efuM`OLU>d?m^U#kgyYzFQ?9~XqLp-(`cT7&2YS$I5s z5_;B}N6YKPTFdDs(q{*KiuC_Mox_i_d9FFl;&4OOn`7CauD5v_=Ka(OOJ*oDrv~Ba z^l6gU?L7_a3T|P&h4kM;w?w@*?_bUtF}MNiXGY+5bStc@c2D}OEPOZJ+Q3ujHX-;$ zx~*h3(-EnEO}CF3bBLerfS!jOOP?QsTdT3`Ay?8J6R^(b1wokiYv%&VJkLz0IJ}X* zQ1V~U7lq)z>5I|-(E4;|)DJzAz9a*8r@N%!0dy4WI&=bkSr~qr?iPdB)7=yBC-fDP z`IEj9^*Tq;S7+dsbk87ssX7n$qpwZFW9aL0@I3nZ6ug>_NoE(_OZ+Q+W73$z>d+P9 z=5+56+?l>v>NnH3Vmyb9qWg#8$LRracm;hs)_d6d^xzo0m%bN$4zESuhs@zk=>&Qn zegQo$1Xs`xMd0D;JUpA8D1Ba|AI5qQ-$5sX@DJ*oF-MfslTvU)`jHIWfu5XzucxO- zW+**XJe{7Ng%{B?#9Qb`lkgsTcF>r*)#=A0a05D(f!onfN~R}0KLp=RKa+;1(9cPp z_jKolFwAERXJHcNGnuRz zXQU7Bt$G9mxFm9cQ#-Q^?qc1W7L=Y^KJL5|hOb~gn}vBF zcebPFkz-kxd+U+&>G!3Nu6Jh${txRr)39#u2MJ@2I*j!XBXF4hNPG#s%fNkTxi25} z0R3?iPSLp_ypsMj2JfUl7xOiO^CdF%gRFmTV7?}Dc4IvCJF)(43g+t|=R2t@F>=gjKO@~D>^aOAj?P6)#HGIK%_=Kd;bAoazpH^{)czfOw7I)`$v zKVH|>I0ox>HBG>}UCq(+_|EKenz%Q826`UPXUL+n^RTWrB7Jn*p3sK%iw)d^?i_{hq%V#M@B?z=S+_)^x_W#PW`CaI61GflPhzlc zS1tnYVm+6Kf1y9cx|-;|`wYuA(e3&?4C^uZc@EZN@{1I#$K;pj-$eJ+#Gy3Gab;s z8DHP|&d>adtDX zj#I9y&3OIsbx*-M<|{%lUz7T-LcV!`edHS3{8(CEFEl@e?iGVu(>F-IhdKiDTH(7P z0Z-C;2Ilq9*IRn(ID1Qd6*D(S;5XG6XY=>zJ|Xy1wPe1fZ;|@XYUIN@=Y3HR2U#Cr zVBRl$0}^l})(499*ccpvJFz|$V++UW=`r|mbq;=qo`Gdg)pgBD!pE`xSQL)Xk4vUE zJr_MsolQTPf|t?r4g3-PR0jTuemZN+Y4z!s;&4m)Wh{GIcY0|O9;VL0NqSif<~it9NS*KOZdF<7_#hdjKAnY=9f0sT`P{$8Dd^&H;|x2(nbUM$;E=lqu>tn;%k z2zRgqUG5D`V{`AhwT$g}3SN`j>@KDx!8F&hPLkxbNu86?v>6+)Lrj8o};Dfl9F8rJpp55xDdJ|GW2Lf;;Oc|Q8@h{MZSACiE#(L=Maj^Vx_ zyqER+BF3Dl^DqqcGkKr&4@3S;o?re%5wX!VgLz-@KPdGP%#6#x zIzQv3kB)P^)E6@|AqDeV;eSY${e<;LqVWId>FD3eN6R_esxCb{4>zS#l4(b$WAJ6P zoENQbqBn$LJ$^Q!e=9yu`ZtT`GV^u>eu>_Zg4fc!a`0CA;~@NvS~9v%Kh79))}gF_ z9)o#}_3z2U7qI?|WO~tmhhXm0Y9;7-7U!zk@sj7URPD4lyxQigwami2zgIgW2lM`3 ztxFRAigoWpB)HJP7tLR>Z{K9&AVGQ8ea`%=v3x@zC1;Om(A zUl{IB{}h6U(0gO>IQr)V{3!iP4t|#Y)xf+aRQpx>>m15;<{a+FYWqUQv@T+PAJ)~n z4*i?d8>nOO8R|HEkva`uOaCs*^1f5;_XIpr>q&U3It4$Y&cUzKe??(lKdb#E8QveO z?UxMav)CZhhVxnM3&I>*akVVW`(SaY)OoxWm&M>7wtsQ$2+TPwK2*%(zxc=y{3J7N zrT=oeon$yy#gQcZ8SCwH@c-!Z z3V%gEApV7(6gQ?FuZ_i%6ELrh#WS#MJKnR3XG(_8fyIxaf4kGU?5rTH+c+x&^FC5M z$G}%HGbac4rXLdzq#u_&kD1~pvoNm-#quoCZUHk3Qt-?4vk{obcJcED=CM?~Q1V%3 z(vtrVy-4yr=8G3c;a^!_8a5`P+q)c@$f2xn%)oq&Q2c2EK8y9w;;`p#h| zygyd=Nrun2)vIG&k%cx>Js^4Ri|XY$_;c24g4AX6DieJcsTk=CM&-?z87+SWifv$3yi849xSc`h!vUZ)V0Pj5&{U zQeEy-=bgZMG6Zu@swX2b=cIZv2J^mCJt@obdR0A{f*;_r&xGL_^z(6eF1;oPze;bw z7|vTu|0fG?p+Aw#C-iqQ_y_v0v@z{{)+I%#x35PBrG7SDCk693EUAk=?FX@5UozwA zkeKIG$?-vWBkLz5V9rm;i5X)$l(T*k`gCYPH%h@*(@jF~7`j;$o=-QIW!KTChGE`2 zN?OG6QIrzaTcXeT-0vl4#NaDfZy`zq^J=WWi z=V^(&cI(LFr=%15cjWc35_)OV?CNT=7O4Z*AT2dyXD}XtY3ki z7d%K`g)v<4G<~%!yMgX086D?!DPuYXSie34^Zr=UD*^KwUQ%IT9zP{Fhhd%1K51Bc z_Km{2kNTm0p^o#m9DFAG$Hg&vAo^eUFnw1ZevuxGJ{NAG?~TDf)Axmpxu`BZECQcP zqm8+!FFi5_&!iuS!%OMWIrsy5EY@`q&##j4X=5%vp7jaHTzoM-F$L@KImy7fucriI z-QKC_f3Y4v)04(@uEk{^MZI%NdbZTBryoneQvor5^CG%qNN374!z<F7z_V+)b|t z!YO)H9M*lYCIR#QTe8j=b1AP&B^%J^(sP*KBz4`tZ-(LVtZ$agV)~sFtn;=F`Dk_4 zw_{z=hV;7$_!4?&1m?3%$p@0r{reI6M|q7Z`A-tovE|VJvf5nsGxWbqkLNFf@Rh88 zm4*4tS@Lxr*8Th6G`yLaJ(Aab@k7X%u1B+;NB^$v=pQri&GgSwpFsbbgAd}od^cXZN*%1LTQ{32^@ZSj=xRB5HeFpZ+`pwI=-=&o*2}`ibm!PgYodSm zHmuh||L)h)wbStZbe%Z-6n$6{=Kd``A`0(gy&m$Hb6=F!&%hV5ehm6wek&b{!IS9| zq`rhc5&bX!oNkEB6}%3Vo}7a@Z>6Uoe+Bn%X*0?2+Esd;)cbMS8zn!Cu8_J0n@ zeRCduh3yhbfnhjL-xW0GN?!L$A3)|xKGT+tNx|)z86ShM zp(jX&_xjR_27Z9`S2FO!^dhYHN*+t4i?XoJ$*WS|#*CbUSN=*b$>C#r$=LY zIWj#WYAoABkB#MdxHs!749sJ=bd}U~e&jyh<9TM@h{AfzWW%t|!#7g@iJ9-x##~iS z@5i!NooF2>61S!O8Mp^sJrCbTmxwtJfl>qW+zcERggJ)5;bQKWK)pEpA(uTi0rQ*< zG(?}PeXKV^pQ}$&OP$AF;N&dK>t3L75azKFXdH*R?SaPVdG%9Vwn+r$IT&an%f7Ak z9Q?655C2Fv#d@zPR-@-N_0{Nk4X+`AQ-Uy$;lL@9;eH7;mrNh#n-?W7`5DZ#5kE_} zO~TvM8F(MvE@sTNJjVm=u-24XA&s6qzxyBx6y{9ajrmxMx z|DmswydK-v=Z)!A#(FR0dmT;R5QTN#ZVbUZ-vbqr;q@?ZlVtRm?;VGAU(0o`m+qH7 zSZ}X|?0JjiH>zWBPK{-6sIA7bH}Lty{{G4vbiemaqORw4e~jmbQOx&G!@92i8TeJ! zZ!_>)>KyzzJs<}EMaR+e#v|z4QNK~oquVit8#}UoM;yLIE%g!f-BN#4oq+i|G%#2) zt60A`1?#arL^3*tAxW6mSo=HsDs=vbp30&iBM&rN@-6UOvz zM2}Cw-D$Z8_10s40>;^UmewQiGBwuQ`)hT~n41IiL&)5Gni`p#uU1QD2t6?f^WGYm z7=ra!nuvAX{4F!`db5unOG)(U(^~83(?`$!WE`HL^#r_Jor1qnXN@2D?)S+F_yf&k;h*WLA!GXLzMh6YeM78IOTwqq)6ui*(KY?zH@$^5JmV0#n>*(ewn8%_0Ug-W0vEBmf?a%A2{XXaZ+;;n&$^E(Q_PdMw zzsr2*H1a>vmtg$2asJCL#ky`gnRU75-`0liDs>)vWnH824Xk$y!Mu-`^$5eGS?`^M zr_%CT__i0-F__0^S)U;MHtT&7@F#S?49x42{a)Dt)ma~qHD`;r8TcgDXC+`gmgGIp+q-Bz4_`~q4#9D?^tqp&Bj#)8vd3iEXIW2$ zVcm~U#^J53&&$EPX*nP7D59Ur!n~)HEs#3z>Gr$z?r6`#}S{9foy0TO+WZgIlA<4AOIOYYcA4{H_$- zlKyW7?nv)R!k4L~elz`@N1q^`L^lY+JT}T3 zCgEkQH!|=JbqLO@W5x`wrp6cs*P~Cy7zXn^DsP;EFJ%1`EIT+xhq11~!)bZ_GWc;i zB0XPGC*jR>`vm+I-4XeFeDsA`_;|W=20n|vG!0)tca{3B^yN|?N%u&>JZH;$Nrv}= z@|zOyTg=>&gn3OXkLO|C*LPysdk?MYGx%#Qi{fx&TE1%e-t*~YQ{b3-6FfwXKKD+e zm;2$D)R^ddH`A+I!e6VG7&D|uy%|1Qor7Dc(Q`;QYx!LRX2`AT4)A?7u@+OKxn%CA zPb-I~&@C|jAy28(@T+RcXVm-Px9FBp_!GLdIIr$w%ut7J(+RGw?g7_OOQts6R_e#l z@_Ke?BRV3PX6gm-ne@3O@HuM9w^t|Ni|O;E=ap)y_oFWokD$AXr_oo7pQCROzfM;K z;jL=S=g@D|b&a`Cx3RZax21PeSjXJEHGC2Cy*tA(bx-(CHP&_CL>j-h!rZ6xkKbEi z?pw(^es6`jZySx@TVd||SUnroIlnyv|DpAqF~fA82O9WD)(6JmCTjELqYq zjrmOcrOp{MBA`b95q0P%u`MHxQ`d*X^gOAzQ@4b>(DOUP*Qy7>x7I9^F)zS)M%<^y zc8y4?F@_Oy)meC{dJp_Iofdyizf^9_$Rc%T_*gaOc4S!H500oYhLM-4H^VXY9{6_p zfP`L zk2*w+{XXhAbqH>vZUCRIZUnbeH-#@$w}iW?JHWbKt194|wLTBleX&}44q-hbepuZT z)@{th;N@DEKDsY5I0i<2ruBaCZ|b-)57bf*f^}OmgW;B19|~WrPQW_O%qX~@*2lu* z)f3Lk2DJq7+kJ;RvM_}iQY$A4xvTwk4nTdU{6IzRaRm}Ye4x}Jx}X(kOnt6l`J zS1*Bc>J{)`>WndC4ppy*8>u(JmFwLMSFSe;-=div@B`|da7w)kuAK86yjAO8z~8HP z8#A_sdJkMV&v{snlgwWDQqAmx_1Mn*3G1=F1`{@R4l`@~@N4Q4Sl5f+k7>q!r}dyQ z59)D?-;Ze?)bndiUAUEI>cdfW2=1e901s0)f+wq+!t>Q(_*HdFSobx4Kc;!`BdxcF z^Xdq^U){l&ab@aG@Gf_?ic)iOf#-> ze)_?mYd#L^v4P)@X~yfdXw6{waLo*bPgE!1Q`Mv3^VMVFuIdSJFLe?gq@Ds-?#CH$ z<$jzEFVaj3enUMEt{mqA_)o1rZ_I?CIt`z!UIe#QFM%uf=?eG;t!LnY>h-Xmv-tg( zX2N4y-weO3&cYkjJK$aFo$#;fUB*0As?Nc6)L+0Y)VtyK>OJt~>O9<6y%!##-Um-t z{|UcDuQjlaXRROpRO=i! zx&b^&-3XqgZVIQ>VR)^&CH$_s75ufjHT;V@V$8#Sbq84I3cnxIJbaSYJHvWzu8qQ- zwB8-QO5FpFt9!zu)iHRQx&nSi-3MNw?gwYpad@|S5L`KjgN;e*eF488(cCIO$V z9tC$%kA*AeZ~|O8he^0{4yVA6XnqDj-;Ze~J+AdlaOFPT48N}REL^!ycffiN#qY;7llE$6 zmobl2Q|I8I`U|+edNY!0*R2kM!31KDctsf5H=3UuWRCYCpVKT>`(Q zE{8u>2jTyz>liax?*;4X!iQ+RKCH*yx)9t(>kZ&5)Q#X<)lFeN-qwX-y^i7cW17i2 zhxq-NX0o0a`2Cn>vd-bU2>gxq>0rzhoj3e`Of#jP);q&Z)lv9db$7VCx(9rVx+kpH zv~@99uOaIyV7-Q{>jUfYwyqz%rY2^|)L0jXx2Xrg|5ZD4O3T~mE z2VbmS0QaCbif>du58tUy!=u!T;PLdPmhhwM3Gf2-W_Xc03$Iu2fOpVu)PcWLWB#Y^ zRb&3A6{#a|9W~~5S|fFLxDEZbxRV-lJM9Ykeaz>yUh4JmK=megq#EO#HcO3hPD`sX z&S|UFJK^`#yWqdnIb){RP=5;7SAPMA)w|(y)qCKmIuG}uKimi3qy7_~M1O=GK0T%O z!>_4J;7#gsc&B<1{Hb~gyj#5j{zHxJol&C3w#*2rF@_mU)fmH!b~GYphK_j`);r@G ztz*42daHx*V09gMgt{&~L0unyLLGv2TXr>oGg@y1zpHKvf29t?I_JAu8Z%SJzpE8| zxMo_zjnomimAV7miQXTDd#by`x2k)T&!nG`J}=NOX5fw1zH_9{$JS*(=iu*IZ-e|C!}?EA zxVClaV@bFnoyx-;oBvcSJLhud^Rg`Guyj-e9%<|TQxouG*1opVXEE!?rQkPc#Lb+q zt&7i<{BPEQ`XOT;#@OBCjK%6`hj zQ*7NI%EHeu^MmwX&HAw!c)N9=Ofp|tm##GMetJb3U$b`@Jv0P!Y^JHyTiCj22gjK4Oa2bJwq!U?UwI6k%zBqB{3QDf6u(0E60c{bZyMHPZ%zdM)Ygl> z%fsBi{?miTq>8xg=cuQ6?3M0EKE-1%aGYd#js)aq7OCr){}SU#4W_@4Whc>lLNMpB zG?#)itpAmUchaB4;XSncTsMNjOK(l>8s`)Pyl}Lz+Q;?s@bq^qI@!$2U`aKkL)t@UxoF zz&vh!)57p~tWOUa^W>rQQz@A9>6ayZK^fThI^m9QtMbF5?%dAZU^nY?2-7W-w zL!X~8W}ct!5Qp^|(g~S)O>MorKl;pTV_hV3JCAc%^oJ~av#poTOv1WPFEsE()?bgn zx=*L2VI5Cf$-K+Vh8Ucu*My9j&-2t53BpI(x-Sxj!_2Htz!%fOT#*zZb6vmpii#tPwi%YO~RO`9ePm|=6$Ms zAo@Jr($?+wnm(=9hp5zVv2{}q{h#Lj$oCuiKRto@0n&30d)^d>b$`icFrMZ$)_0C9 ztK&H*0)K1s{#wW{s7}kzNf#VT*GGOqD;keHX2B)azTYx1uLHi{a_~TAPLd3d8B;F- zb52aX6s%*Ad&Giw*yl9q&+EMJG+FPTwqE)W^3UjXU`7nq>%fd8+>x2-VveEc&k!7E z&p)!To=1PmvQKDTGE1$C+Xvw{)nWKQ*5!9ZV9trJo7Dg2vR7t}d6wt0sfV7=o?z>x zUrPN<`a=Up>8#Xmq&G@^82v*Uo~nffZN;+B-JqE$tmoAG==0oo);CLr`>1rKWER=F@7@f&fgUaX zm`=oD-iv)>62?4VhxL2%@QL)GFnl^a0zIF-+OC$6T~umgO;Dv|rZsqGn?7 zO7>qQ{>VBI$iY13O?_GRXInQ%CX9Kpg!#ef|Kd^fFtN_(v*`1p9&f8sFz2&$MI25r z|A2uxw$fE0_&HnmEz82I=#>%pJ^Gz6`~&?~)R;8yYrf6spXMC;-cG_{X5`+H)_uAq z0moQhm4Sz=L-3>YW&Jv!d`cF56J*+(&_M80K{#&^!ZgwV9&trRS&CM()cm<>`(& zV_vRiUA7lJU*`E(`Y6`>vYwA}uYdUr=FgUTJGxaCj%qy!^IB@o3c>wYKO+Tm%%-KR zi*sns%D_A?OsgdP8uMpLpH1}XvTTlSA^BgmC;Gfnn{J8xD;%deI|lQ(GH1nMK7*Cc z%))vfoR@(080(vaIk%;^N}c<Xs(eMr}rj6P@Hkuc^}hkfFxzgmkPfS#`&OW!V;X4a+e=3pKJ zzFQ5f_w-vM@HNcKe7<@M-9H51t&YPF(6>ouGTk==>$V&!nU`6wmV$ErUNfqC8b zhtcOX9-sb_Abc;EZHS()O`@x3;peT*iD{VUy9veNk8Hj4eOa$we`LK&I47m&#b6$X zzB=O5Y`#qH`%Ab_?eF_ra;es%sPmp%_EQAz%leODc$l?0AqP*lE}a>K7to!gKaa!G zS>i3W?rSHRkGX8)B)o_9L(qSzVZB)%u0fv?g-@dENv0L^r%L@o>(U#=*VA_znDgel zI1cmP;jfv8b>G!U!JBN}f3)=c50{;ugSqcYr=q^BChOC%>@tp_bgF^dXgv%^=~XdU z_uUzi=luBFq+!mF|7^+gJS}b?gwZ}sh55`@D)+<{qiv?RwbZAo)9@2?8;oJa z3)W@dOJ+H}Hw(XQU3zZ{<~=tM&ci(BO(*H|x6POfFy@tqbJ?F`a6>LT3;kD~ZSC8S z{7PQO{02Q&^8Q=;dmO%p`457y?nl4WIkwU#5-^`LOP|WZye|ZTvM%1g0yV?%4_sH7 z!5=h(Wbhn}l=z4G;w%#~cWUkc{&=IbZXm)C>b5tRjBa}~^jzaG zb6OUzK{rdl_2@8`U2~$=)9|Tk$@3ag+$;n0dAPV)4!(++Q>4#LbkiWr`*m?s0}p5Y zj1WAImiH*uOru-LvQN;b%6j>XQQTbWYglg)h2No@Ct=;!r^vd#c1&%@*gtEH$HzMS zWHI;?^+j&a^~bw?)_3yMZ}8;r_jrNFuX~pL(yebm|H?VsP~XjLIK%C~;R;XY zHjl?Trc~#4!#t1IJEp9%{-MV|xPIO5@saMjUJrYGuE*UxzSZN=9%DaN?u*x7^cdS- zsPFRl57!$@Job!d_jU2in<7~5W`cZIe88+Uj-&f}*& zUghx)kN*qnaq?z0k1_v+dQ&(5=J}pF&gDYp9*-w^JlEqT9)IBRFRtG@%HtLuV_#RU z>#Z9dQ$xr67WQ?)xSn7W?4P$D_ISR>nEyiNJJ*|WE>zYxpX6~Tk9&DM*yAxCPxW|# z$4lLDZr<$iyY6;v-tCy`I{wW+JElbac3qFp^!Or=ulBf)$0I$)xmoDB#$y~0h5DBs z|LyvndLFm(_!^Jz^?0_&IQA<0zk_qX;2+%W-GX~Z<+g9ZiCLSw(QG-)<90YtE9;kg z>iyhn<`x_ewId8|84v3mZkg`Mtne(G^;qsN+CPgqFBo%PFt)c~90LVE>M`~;ZjJU& z7T3MX<1@S6F^-NWyVtF6#j#g;Y;VQ(R?frL<2}CEKB)+aBXQD)juw zW6wNq`^i)P-Su{CRpqkVae@?#dqKg+d3>_RXL#J!@~mlo8R*n+jI$y;{~V-{x|a4|9-Xk zjeg(rzhi!*|8@MYqCWcHsE_{lX~EyG-rD>=!~C8!zt1(lA8dX<)BJv``TZ&L`I&~o$ThG6a`F%6< z+vM+sryKq@^ZWMZw<(_&9x(ia=C^6nE?hGF^UUw#=C?_o3!h;4ChsnMq2a&M{C<=9 z{ciIc<=@BsbLRI~&F>$X-+%JIuk^B~ZW{Q|)TS%F?4?TIs`R5uFHrhprGF6m@=Gec zrqWZD4l5l~I;*sZVD;-lhtF*4P zuk@ixpQ`kwO5dvVqe?GO`eUVk5c03*O|U=$bw_5kC+Uf@h%0=O%17O)SP1oi_50KDf9+zprpW`J2>4mcY) z2pj^=0qzdm1Gpz}FW}xl1-K7T1?GVoPzM^o0QBJd>O$-q;9rvjMR9(X$N4B(l-vw&v<&jFqbJP&w2@B-k4z>9zv11|wy z3cLz<4e(mv?Z7*LcLMJM-VMA5crWli;Qhb{fDZ#70X_yzD_y+Jz;9J1Af$sp{1-=J-ANT?AL*PfikAa^6KLvgU z{2cfN@JrxVz^{Sd0Dl1f2>c27Gw>JSufX4czXSgO{t5gG_&4q~*#uk+xHxbL;F7?l zfJ+0H0WJ$%4!AsU1>lOnm4GV)R{^dHTn)H7a1G#^z_oyD1J?nr3tSJlK5zrzhQN)0 z8v{21P62KT+zhxma4K*ba0_4nKmc!fE8y0^ZGhVXw*xiuxiKj?m!QMh?E@H*h- zz{`MF0KW&`R;ELI$X`kHe;W|4Hv_K+-Uz$_cq{NG;4S~#!utQi^S`hB{J)+jDCfVW zIDr1A(%<3tm-Y95;rD+7Xp4P2N$nxEY1GD1TSsjpwPn<%QJY6?q-zVQjik2Hwv*Jp zQaej+EZSUZ<9%C8Z7a32r+|<4i~HMq;F;QNwBy|W{2RZiJ-;+S;jRO(0Uigu3ZS-s z6=(y;fF5u@a9^MU`~~7Ha7Vvc7?ZESZL%PunhEp1z-`V0`ou%XaG+F z?he#|^MEdJ1Xuyy4crr`08app0>=@KGXSJF^}#&G`Y`BcfKLNI0KNfS2z(RxI^10X z^zp#^fOi2Cz?r}YAiE^!dw}->cLiPwydRhXUIN@3SON~?zC6@X`aA6!O0TK(T1v02 z^g2qftMqzGudnn5N^hw2MoMq2^d?GAQF>FQH&cpypuf|QFHBL!nBGF^fYMtkMgG#? zX}4B-8>P2ZdOM|?m7cB?<(B?V8&o=^6lIS7PD43mx=ks{EDfvTDm|q19HnI+kpHKr)< zOz)!A6Z#miZZVkSXdY)3(x%Qq)2E zI}P=cDe5NEo>J6neqL3Iddts8l^#=iTwHMNa=%>K1At5 zl|D@A!<9Zl=_8dsO6jAOK1S(dl|D`>+6ekP4Q&n6Cn|lC(kCl@iqfYleVWpzD}9F2 zXDWS`(q}7uj?(8UeV)?iD}8~|7b<;`(ibaziPD!UeVNjiD}9C1S1Ns#(pM{ejndaD zeVx+RD}95~H!6LT(l;x8i_*6$eVfv^D}9I3cPf3C(swI;kJ9%leV@|zEB%1d4=VkT z(hn>Bh|-TL{g~2^EB%DhPb&SC(oZY>jMC34{hZRzEB%7fFDm_#(l0ChiqZ>|epTt$ zlzv_5g-XAn^qWe*rS#iMzoYcKO24P{`$~VH^oL4+r1Zy1f1>oKN`I#G=SqK}^p{G1 zrS#WIf1~t2mHwB~|5o~2rN2}9d!>I+`bVXIQu=45e^L5ZrGHcUccuSO`cI|*Qu=S9 zw-B=F78ld!iz~f^(n~76l+sHpy^PY!D!rW2%PYNt(km*xlF}R z(rYTcmeOl0y^hlBD!rc4>npv1(i8VOjQ>qDeivfMU zrP5m|y|vQYD7~%H+bP|w^mL_LlnyE#Qo2>?u+nWxw=3PDbf?l?O3zSwd!=_!dPk*q zQhH~lcTqZ`bhpw`rDIC>C>>Y2SLvBbCzRe*=~+tmDVbe()%c_DxFtaQ(9NrP`aRWQR$M>rqXkj9#+~? zx~#OVw4-!I>3K@KN_$HCN>`O0QF>JAF{Q_qp0D&jl-^hA{gmEc=>wELQ0aq|K3M5P zls;7H!<0T;=_8arQt6|VK3eHxls;DJy*A;=^K>3QR$nMzFFy8l)hEz+myat={uCZQ|Y^uzFX;gl)hK#`;@+4=?9d4Q0a%1 zepu;8lzvp{$CQ3t=_izaQt79Zep=~glzvv}=ahb4=@*oKQR$bIep%^PlwP3pt4hD7 z^y^A5RQe62-&Fc7rQcTi9i`t@`aPxJSNa2`KUDf7r9W2s6Qw^@`ZJ|JSNaR3zf}4w zrN37C8>RoL^uLt;x6rI%28Nu`%kdTFJXQF>XWms5IqrB_gTMWt6#dS#_oQF>LSS5ta*rPok; zO{LdTdTpiGQF>ja*He0Zr8iJ|L!~!jda-Yy9Mc@b#Wh@)*d}r}@33jBJmcRhUxL#9 zgK&OvOh*9M1g-^K8@LW|UEq4a^?@4zHw113+!(kCa0+l!;AX(hfm4CgfLj0q0Okfy zyA^P2;5NW*f!hI_fzyF4z#uRLYz2maZNPS52e1>^1)Krg9=HQ=N8nDtoq@XmBfxH8 z6c_{c0OP=3;7niwxGQiLun(97_5%liDd29vG%y3q0&~FGz(L>;a1L;H;2yv|fqMb> z1}eaPfGRK#)POqB02Y8nUNyb5?V@EYK? z!0Uk518)G{2)qe+Gw>GRt-#xWw*&70-U+-5csKAK;Jv{6fcFC*06qwO2>3AY5#Xc1 z$AFImp8!4yd3DZ6X2)7&w!r;zW{y-{0jIr@EhPif&T*j8~82oJK*=gAAmms ze**pt`~~lOn zm4GV)R{^dHTn)H7a1G#^z_oyD1J?nr3tSJlK5zrzhQN)08v{21P62KT+zhxma4K*b za0_4nxFv8a;MTxxfZGDM12zMv16zPWU30`3h|fcpSdU>>Leb)W$(0E@s9&;-r}4g)P<8E69?Um@Mz#Mz+-{O0gnfs06YKrvXm~o&h`)coy(%;5oo^f#(6w2VMZY5O@*rV&EmfOM#aGF9%)$yb^d7 z@M_>Sz-xim0j~$%0K5@+6Yyr>Ex=oWw*hYl-T}N5co*<);61>5f%gIL2R;CN5cm-A zVc;XcM}dz49|t}Gd=mH+@M+*Pz-NKa0iOrH0DKYn67XfsR{1W&T@N3{Vz<&b&1^hSgTi|!V z?}0x6e+2#n{2BNQ@K@k(z~6y?0RII31^oNsn+7%k7XvO1TmrZxa4F!@z-55T0+$0W z4_pDbB5)<(%D`2Cs{&U8t`1xSxF&Ed;M%}-fa?O+1FjF;0JtG=BjCpPlyMW_6yT=7 z&48N&rvj$|w*WBi8n`8JE8y0^ZGhVXw*xiaT<9hd~Ld~^Uy z^aiE?EK?l76666aj~$o==76&SEZZBva^wLlr5w0BfMwqU_XO?*+#A4BzJdDyRbU>d z0d=4OEC7qZ63_(B1+Z*+084ELupD!s4RnAN089S{xDU}f%^gX2Oa=C5O@&qVBjIZLxG0@4+kCrJQ8>m@Mz#Mz+(X{vmAIlfaQb(PXwL> zV5#rGQvfWP9e5h>bl@2PmKhE_3wSp09N@XY^8hT#9C!inLf}Qfi-DH_F9lwP{CPR> z3gDH%tH66T=xab<3%m}$Uk|(icq8y8;LX5WfVTo~1KtjI?*QHjybHkc#ew$#?*-lm zydU@g@Iko!5b$CA{s{0<;A6nY!TSX8N&Nm4@M+*Pz-Iw0c^tsf(Sa`jUj)7cd>L-P z0(t>}Wsn131HKMi2z&$hCh#rb+rW2#?*iWgz7PBW_#yBk;K#sEfS&?C1AY$t0{A8H zE8y3_Zvea^4dC^NKj-7MXyA9i?}0x+_DA4Pz@LG?0DlGk2K*iP2k=keU%%1X zsZp&rx|{G&uk`w>^OgB#yWVUsLeN@)pti7_SzhUn^m>hMzu9RE(?9m^w%SyOdmH^d-EOBl*;^Dx`#OsUR{JZf zDj!*`H#=jEexueOYaD6T8okO`W1+g*vhvxbE+RA0ZuT?6gVm<0W`t9%>T$7~5h83N z+r7Gw5wqb=yO9x%wmQ8=sok+g6G3fOTg~%x$_G{&?NZ%+o!a42;as~_Ca%{l9_VJ)}a!e@r-1KeVq?=NvR(>-z9z& z|1<A2RV3w!L+aji=i_SmK4dY4*JGqFk}sfLS(v9B6Vl4`j46g8YA)o}4DYB))% z;o?`+a1yVfjY1~oi6qr<@iTs?hLfZkE`CJ~CrLG2{E8Y*l4`j46*ZhBXh;K;i+L-k#3b7z{uLG^3dlgvsL$wn7Mv%JC+9&rJ`@?1S zjlkL`cGkWTSohn@>>EMqK5L)cXTra;%)Sv=`^3)LHv;dT`=DI<$AZ*-(Z0G*!_Pfe ziTzyus{5?{T>iqn$wpJ&Vu206$;P7lO!!SU#_o;4+Bex)bf2+rvN3jV1lGRE#-jVw zzVD55c~BI3e~hS@7e!&JXR_9WQT2>4r&sD z5=H-vFsE0Vo~AH)JwIN~m6xJ0r&sjP=%wlDN84-omn$zuuhhR>c~QN5c_|9h_~pxs z(JP6cDH10CRL=-g|4fm{>y`LtibPS*2vh$|k;v;66C0f)rilFfiMN>WjX9MR-mnsW zQKRsNr5cW3)F`}RsfObhHHvRo5@dA+pY8okmomTL%9&xnftCDQmAQPDrs zO62rP{mV538criB`e#~+)ITFC>g5^&_0Nd%dL{XnZ$NyF@U6TLXHjJQGs4urqNu26 z3PtLl5#{wt{4+(VsAmdA>Yowi^-BCRMX9J~3PtLl5#{wt{L7aYO>9#rQvZyo=$|PR zIXw-EelrYT?);aBSR#RmzgS>4fxdxdzLJO}r=ul3|Lu$#_S{!RY4S;u@yl4ue_3-@ z*Ou~VFpgiaEMtaPs@ao?Nsy%9mVzXkYCfKj7QTiCUHn>0nu$r!&Ba7~E6d9u6)S~Q zKv>FjC8V6EnVgfai>10UJ}=329mP@V8_Tv9@JF=b2nn9r@k3F=jR!)d5e>&LYPj)0 zs^R!W4L2T0H5|XF;l=~0hT|7Ca^nOadEX`E^$P8jOSIf1sv0$odm2b1D*9&{_ne*v zrKo2b_f*e_@_HrlD{1#7@}_Z5{WGGXf2MKI>6OOMH14UM5f%N*w)+wVBT8C#mM1k^ zR(ND2QscN*XQZL6k%AFhHLXcrS6h>ut`@Xhi_5k+MCqCkFR|@}i+!+|ZQHDFvBmXL zY31U08q2x%*z4xnW9Y7t3Zdl_Kg3^C4&cDHaK7*){Gx_y;ZhC9FKW0JF4b`SqK0eX zQVqv1YPc3I)o}cxMy}=ak2Ix#i1ALd%zv zhL$fU4J}_zDs2e0U|FecFHpIY@cQ;5rz<=jWhHH6kfh_(Aj!3wL7HndgH&Q1hc!rZ zt)`K3j7xPhZEDcPFK(@;vD|fZX|;V=%wVDF=+xYJqe=@rd%~M(wCkg-=E{7h+O5y6 z)UjkU2*$ddmGNfFar&K=Jx3bt{=QB}7hIC|%<NoPM?2H=6ZMt5xle zH5V4JCbLZoOog+b)`Ze(S5e#BzM6K6nJFB&&U|j{1Sl!zcF5HZV-0Rb-Yw}-ztkbEDdk!hBo5AHu&wFo1ZSh8K>4N;=vak_I6)@CooIifQSVKmP^JaT zIVfbP6P)RGFC+omU2SO#x?02jnOddVueNoeoN`(nEyVh~(m9G9Hh4Ms*V<_ z^IDu816z5tl~hizR&CA4R@m=pG*^x8Shsp~s)PMLy@SpE(loZ`a5Lyc`r3O-hEVdfmP@*dc4)4(@I-h>Ss-U@PV3S$DhniEF z?_ij*ys6S&U7l}rE1dJQ3-(fvMB{)l+G{q6abI;2r3mb(@5D2D zB-zj;}KQWN{4DF%#76fJk)ZfmYF<8 zn(6cK8gAy=w2jVswmW&&B(qM$;1rr;48qka)uho@gYpJu5j=4;TkS4V8j)8#s8>5k zs3KE1oOea<=pDk98d%d{MRAin%&@FA1dSR4w6h@~Jb zFh`O5$>W}5)Cw%G;KgNTi8n7&GHAesL!B#+xgnTow2-^Tr9>xjNY#mR-i5Y;;72KvERbZc<$Zje6(rI4pT=OY*%ClMeZIoo!z6R zkb6vYgR1d~-0~wiJ{Y%Sc$VVos~R|{YWm2XB-$!g4D6BC%2Kt+=CU9yo9`Q}-Kc#e z7jcszK1*G7?T@z;T2apmjV4&4=G!)K(grZF#4QghUGyCbuM{(@-GwUeT1|zV3Q4o? zz1Bw5KPRa!9@uPiVRj9I|9Sv;4&o~8d_F5E7kK>8o^bfN->tTLtqM0U5rbM) z)loNOg`I3gby5-iL?5@(JXS%gslUjf{v1M8)1Ty&5@xQAfJRA}KF@R((80TC`CZJy zqJMYyJE-9L3ug7#R{smWI(Iz%kA@N5xRgFZm`r2)b( z4G?~5fXJQqiJaPp5Fk>p5*r}M)(ViO%YJyIX>1}xTpmUwJnPc?i|(mU!#OLI*g8pS zYH&O3Z@2CThfpdg@ln3|9sFa3D%nPoZ5avm5v-K@qk?VQQUT((zvx5C^)V!YHBrc2 z^g0xH?eZ#Hhej~jd4#sn6PwgwYZTQgPEX}=13@aPQG%3j1;1>F?z$T}V@(93r z?0D3-Ivx@dfr+0(k7`|w?A|*K3&v~Gg&!kDE}R-JVy9(k7^QKt+QWnaI;;@&@T-^t zp^y*RLOvw%M!I=rWl7TzRV{V16&AKqJ@ILeaU&f$pwA+&v^y)^#zF)095n9CI0#~w zJ|ShjX(y5d_G~H`PNZ5yFz@W9aNGWi&`K}fu_wSyEpE3@h9*a_t&o_YN>Q^31&fhwj!!O00j zN%$@^Gd7IN>ZJPis?)@`dS9f}t7DdF9f z)PYoRF1ooCDL6U_d*!K8w3;s=?p3XC{2ynMR^>&yR}lJ z;OHdmm8VM4YBpVHa?VuX87%sdNBXQ_4*-=#8T_$|zM|Nf?x`lvs}T=N^y=(JoX{eo z8clCuX_7O0gjNONGYPZs4^4WD3=cXzE6?LtWe_RvZS-eWs_i{(THA)N)bhzc3JX37 zuQYZy`^)4ZKX=FuW?@8wwT6_I5Q9!|IARF{a)af&Qx%5C= zR#E7>Mp2Ok1|rzotnF|1|9+9LD8%SjL&Yf8T%3M+idgfUt%9O4;=k3+P#iZ9YSV=13lGgfTWBl98{ zUv0H|HDqg>k~;PTN!agnoewUxCY$Z%GCuvO$BunwvtDoLA}hy3G96VGYDTlSB;n(* z`m>Z#N_l~eO%!Kar}`)-oqt8~O1r)&|b6(!yA&ZpE}L_>KBN>2Y?n+oiD1IrjYwTuKycUxGU zM~la$qRuwD%gr`yosn_9K&#VdI?D|yfH^0|;2Ct%Gi^A4JB{^pW3kyo3xY5^mMNwj zZZxO(j$B1;LY-Ra(2A&2dJQZZ$LZkIiaSqp?wV~ndYqDGEm!pp))OsbS=sL6vRbIq zUCa4WwKrMq9&YgZE=`o2=gaJ9nwEgC;i|{$lN$9CyF*Xtd_5!5S}U-tZ3+gZz#3s# zpfkBCEz!PWoo=^ULzZxW)-qk~W5M?PYQIsRS)IoMK=i7#Jo|)tHU5a!<1#jZcCX)D zXg0cQ1h3|TG(jIb5k_7vvsTb}pfKXX*Mmw(JCr@CMfmc^UA@#ls-xiO77pRfU`q@o z9hWs%K2hmBkJ8NXsr4xuz}6V=+PRb!jBqO}{kfFuQpVk#W4cHNrJO1+t*ga?aimgQ z#d7X@=rTsI{@xe%oFjZ#?4moZ?`hZ1=r*uuv^|Q>>kMQ{pJTevLBeY7q&_IvaNN*Q z@22zB(VGO0bcDX8Gkq|eg@h(&o{_fb;*640oZaRg`)6bq$t@?^N1DARx)FK46_O}o z_>fDl=JuY5Md4vTQ@^nsOK4~ob13F9=U}zFqMKmE9D+UFK)Zyo3iEB$sW3&3CCiy5 zneJPCTFlCP-JD}%&zpUO;VrWIEDcc;mtMf-iTa_v`|!P*a@Ch4R0JH$e?|`#inl#L z=BiPw(8H>Jd?Id0P0_j;J6Yw0r&$r2XJ1-1m{^HP`x*8%=eyM|#2Nwox zSorG81O&AFET=G8JxrNJRl=B&@r1_L@Tq8GfgKG!WFfHk82LAIw7N1u16Z^du}+DE z*gDqAq_U*Q!~*R)Xw-dKL|n8ux@D;n1{r0GIesyqAn^JEYF2zwAe@OC8ZKyIrdJG% z)x@9~WC3c-N;6GW{_nVGMutn6U)5XnnvsUXRwSPgG4PSn($IwdKhqsngo0w zb@5osc1nwXaEZ&xJM-wSk2KD%wpQuQ1uf)MwZC*mXW_v7xzy96BS2^B+NyFpD^=8- zv!$gtz&5$Fp|YCw7bS0X`D7G$gH)-xqj;0;9F^e{k0Z-NDo&|6KDL5)w{X>Q|Q)t+i0VA#?ic7w$`ZU*tQJ*=Cpb$2z=p=<>NM^jaT1Ic zM86;jIy?m?Nfga`6l@%voM|8QSL@_TI8M0je=0dK`sl;q#9|85HaDmPvXR{jvSfjZIn3a zyVzo*U%|W2DyGD_l#v^xIz~NUQNg34BTo`t2zg1eyaNQO6jEg4Aq)fQC59kO_Sa9# z$_ozh!n>KvY<g;UNU?WN_=T3qdP znps_;ZOt?mspI2NWw`^TP8YjJXxviAyI{RhY1HW?28s~6EOf>=S*O+;#uw6fyV=Y+ zGn&?R8yRsqTQW>x;e3S-&M(o=o8+E8+@#J?SE9XcYS;6sbczt_K20@jsw`kcgNF%( zn}>gTcV&gi|^8aYua z>|b4WcF;08u473Ii~Qoj7-Y+7@kuNAa?GE_c+x#sKu%2H)EIghny4RG$hvWMC_#dz zKMr%$&XhZDeY|}}U^cR0 zvLQ`XpQZ3x^QAXBKGN-0j~DXC#ac#vAxLNP!8+z(DWt#f#JclScs$Dxl%3Iuo`{Q* z84Nm8nLHOJTyHLj8s5D$V;>b$_ptQIa<^^yW_S(5Rn|TT%h1t1NYeWarjtR z0ugkkXbLjbm}~RQWMI#B#>e;I|IyjNlT_Q^IGPWulp`xc=%+eI8(kW+qsOWpm^mcY zs36VaJRWTqIHjj3D|X|vO{;OBJMJ5r!ONi4${6_rxxM}91QQmw&&5!Lt8d)8yrHMM>h{{-8{T&3mj36t;A=%83sL>fpJx-||o44-Rit>UX zE(#r16E*6aw{9m+iv}0H&0B|ep=9ACrv@LdzzjqX2lc?*N`HwQa4Fomc`NTCMrrFE zU#4R>SKCb{I)7)2Gu@9k7%(Y9^fykjTz9rK+|A8SeI`*yG1(re+nSbl^- zeG7#X#X0c%7=;A>BA*sP>k7EwBRMN5>U}Q6sEzv2!TC7Eh8QD$eLzFThm)!s^FX)9 z+efsX_7U~hKB6u0ZA}jcG}Vu{>XphehP#y|9JE9;kJTP6Ny5OYvcw+=z@kPRhsISF zaP&nuwR1&Zj4HIh9L*o%MGn3FHb!`q8kk>B4qgP8;wwiAV!AIla7X2ph~+fACN-w? zuE8HoVGN(z5%fx(mu2D^vsH2qiY(Mb82B8fO0Top)stCbIfa`~GeJJqX<6<#Vmd3! z0ZG<4hNZdn%KULU#?q7kS@CBXy7bPnXl)~{yfeJf1EU8N)-&M`Zwp7A-oG^V?=8Z^qrgeinDIDLshr03uXGst+ zpzLy2j(Cu37T!&M;{Y{18<*z-Twz(_mkf0eH~x7+PYK?fQMIC z=-d_kg`PlvQTHZNsOc~2MTEE2|3bx3Ua*InUgOhXcO#>Fn+LZH?br!jiVNk-nImWK zsT?|cVr=rj*q)Rkk9%%8%-d;l_i=i+;a@;EV5z*kvs3P9!M!Wr*%+-1>e+~dUeEvAZzLV34M-Ihy#P$J=xa3$OiHUP=BSSc#aY7MI z!}6+1A5Mf`Qw<`|4gN^9qCj{Rk&U#m;*^?OO%LIcPa$l=BWEd3*I#8Us6kL(>@bu+}H`t1^9tjF(T z&WXRKg~~A3Uc{FonjbW}#7gZE4+TZnXtTF-7@A_b-!I=~rdy4VHLh4}!Mhh+-6+;y%Xeg9T?SQ7v*O*kwX1{JAlIC@h%gH!B$TbBL7hTX z$IOq~oWdFTwh7@0(P359eD_sn742!&740wHWdxVc!<|y&kn?fBF`?H;> zZE{RdYP2;?=$kXXd`FR{je$`GCPth$#DO7Od873^G>kqtS*$0_wiSmM-25b6i|3~+ zGRSfv<-yBV5AZeI7{kzo1{!PdF%0IdD#$dNJ`4h`57hL}S9=Z9-b1HQ)xe|7FwF=L z+j#p7<)K<7W;9|Th6_L_-o!P9fFAeyw+@w|5*wq@D2LoT8TD@NH&3yC*nIiWR)){?r?V&+P&_G(c%ll34;#*Yp6&q6)Nvjf9zJ;qi#7|6wlH;N`WL(xc4`MFZOvpB zy+bJT2rsIm8wGmUIKlq&PK!Rbv6vvJRa^KJ(!ug#6sk5YsL{QL@}kAK{+zr zPLm`2T@G&(w2?*TIWZrJ?nb{gz=+NdHR}jZ_+9C(Vh{G@Ol4$jYIG9G$FFe{lOr*M z{FC)>nEQ|bVR}guhJ<*cueg|!rLQT(Y4C@mqjIH(Mxx&A(L7yUgkaLNBfcvQ?h>8D zzC|Ysys%sZyjDd%sH-W=KjCu$U-i_hV7tDqJ<$@0ZE5Om5kAzUm!jbN;0lS->EajzgaK=R7R9MqecR(Tew8+sxcVw=)K~C5iUw&Fj2@{t z;*%w27O6EvIaMAV4vjG{j?Ye78OgV8ROT0v7PKTmx?N(-j zNJ>xS8YeQ}Q6xzW7IjTwft9-BRb-`zzsP{VXeV9j9v7ww#6LvTVX_u?l? z*v@KT(qPB>Cc_^Lr2MrtXmxo+WKY76c{X!oXvO0#HxA>#aPtZ^3{1_lPVfcJq;&Ry zfyD>WIWl5DaCHSKB`kX(-?`}BI@p+LV0^xW*XD?ch9fMZHjZ&3{ZYK_W(`GKm4gnw zVW7*h=9R_ktfG|TP}-%8gP&c{XZzv7ph5&Xvm)1Eu4hb_u&iC+P6|ANo&r8LAG)ct(a>By#UW z;?O;*9v(5;W);Vw7c6F|f`4`n@G@o#vAo;SySyqu9<@W{z%@hkJ1V)vI5={)sN#!l zbO8|sA3Vu&taa*4_aPX zB2Wx>aN*V%uVajT^h6L~K{6&|20-uHi(r=p(M0{$$+zMB+#2UP?L;Y1=;*JLE zv=`qyqIXFuZuHeywuxvM;+IT#LHht{!Y8P@`-rLaHe9s4(b;7|MC;fvITRSuu;c=- zEsM@5(TD3)i?{f=l`AgLW@LaMV?wEl+lOsq%-r5#tS`=)R-W7brdHQ*8D)UBS=Ctg*A{ghmI`{ zJYV9*LWqPBp@Thd757_*V#&i;RB!ayQKIA2u|65}Ip~*b2M%7Zqxyv*rx)V4E?z+h zri&XSH6bHOoF^_Jt4DW->kYjct?r_Zmxs~8R~`pS;>-8?NWotLMnegAFQG{(H;T)s zHoCHOB5F6L@hUD$SG+gEK>5JkkUm(hh*K4?ZGz=TsqX|a(+tO>MncC>d?O76!CM(s z7n4sFIPD?@nTvFDZ%85?tQJfwzi3(o1=BK|cQ-4OWu6X+B52nAlLMM|voCaxCw0Zg z@@%)dNb?}qR>~-7H!pq0rGBA0i9jZ|RbN?B@ocZ>KH->}?*k!9<8*XL%0r%;Xp2Mi zylxYJE#{IU1=WFNCX`J|ktfJCc}Z z@@hUaLKKF+_t-5VA`nh8UKbJkRH+#ch{$AQ!X9G zh^AT+QG{Xq6P~G}$3wnYX0}EJfg1)3$85$C27f%Y9#5l@X<^s9o4*ie!liH)-O^U0 z4A;$S$D(MvlGvuVk7W0d7lhqL%CbAF0;`zg(FP-NSllm!Qy8|6?RSUu;)!mfI-Bku zlR}oBL#bTz>Ixlx@)?WWrnEL2qdZ>jr5clyhrG?{vDq1Xm{iHk%pUuD$Ubbf55t%p z4?6B63;dT?dUOCXaFJwJx8`IK(ha#vzi?Ked=?SMKHy=98nG}TA`2tgQZF9ntBEu) z*u<=(_z4y9sS`5kpj`?iOX-ZzM2}j0{$lLbsgbX)@SBS7Sey%{t9N`Qc!mE!Fl`_+pxC$961(El7gNw-(yVG4)ZwNiS^Nr0%!)>%)ilN)H4x72O-XiHrF`(Z4|q<=^l44 z;VZfQlX4ePVcY{3DqB2pW?kcvtX_|(F-S_R`^ zmjnfpf@_S3=J8_ceaA94t=s!(&n0bUa58vG>7>v9gC zQ^g{E{nITSjwMGW+n!fGRhq9?^48@pJLZ7W+g&)SUmf7+e!j8TyP)^K(9wx2$I~nd zOr9Wjp>l7JcGf&N4c%(Yi)^~Nb8FJ^B8O-!;^`zY3O4FHHAZ2q?Im0vt!22T?}uUL zOq}YsOY4$yk_&AV2s9J9K!9Bm2uKQn052B^d8@v&eC;eOqduZQs6M<+C?LlZ% zoM`-kwlLeZkj(Z$^c*`B5Ag*CFF4xT;Q?PT!}mTs^9C62G!pTN9`;KhV()_iN2rPNj31oq?$g^O6Rx(fPfYmQ90080OCaRVqoY; z84i(_6ynlHO=*pzuQm`(=jU)(;;K_J9T3UbCzsT)Mmlyr29C4y7=d53o}I@C3TYJ7 zIWE}t;qZgkQ0Jkqt#mx=5%|S`s6ssJK?*#{QOF;8bq*)*Xz@^XGD`t7A_%h-fhDsP zVK&H1?D;*B`DE(BD}<>B&ys_hBJINDgLhn*eDIQZiovt>5U$94XbQbEGr?dFxMnrH zw1jmWny28+@NUqYL=sY6;wv`B@N!8qo1?WZzCfrWyu~IgtZtHTkm3T5Xq^3Tgj;`e z*1OpoT{>X~uGm=6K_zwH7~~V29URNj3Nv6a3_D^Gc4V2>WJH5vaigVF!Y4!e3`^1| zR_9~0BLRh6+YPaF&fM9FF>DeDL(RDreY8VOo~jG4y8IXhMbrYD;gx@k)@N`t%}FiM z@~87n=;@=5&4)|r1Kt7}VI*`=9^C*(AKeItAH!fsA0x+MIK)yn9;(vjT`E{~@I?5f z69>2)0;^X=+`*|7^b3OlWS#zQH1##5hJg>ATCDtzTCH_@YGA?pw1EAqI_hUeI$@YQ@d}oQFMcTFtt0D~LGmApz$#ouK7o zjlB)(087yHS9=AQKlI(xdCp!BHoTjD7i)(aK9EQX?AB6!{C0r{zrLyw!S5Cpw|Pe` zA1#u&FQxSRXt2~yy=hz9k*C;A?QO$~|J`@<{$TcL0|4cP{I(CP@k4l8T~S+5rk6x9 zfTgcgZ{-2+C@zz6iIDjneqw_iMa{?gNH0p}qqSa09DZoLGBG3ZjZn7RTLFQRuW zc_2%a0B}!-MDQY7aC{X5KX@6j_4PAx%-o3u|874z9$AoY%V2r!X=$k_95`hTd+%1T zUTa1VHt{@Y=t2{6C~Y6kL!fPofkBS6S@e#;+t+9>(n1=i2bOsgzzZYpD8xoH`Y>jk z$Ttfsnwy&#BQI!HtJ?0!=H0?F-|$t{;O6h36ynGL#PBGCgMTbH_x-jbZF;JsI+gUvdZ8*3{R*O=Q+ z!izDWWFqFAX(O2NS|+&8M1TylXcz5-OEg|oO{6)jP9lMRTeiVdo=)|C~!GauDZ;W-w?`-=MdtHMpfpSdo;<0#HKYT{KfAG z-vP9DW~td|QT3Bnn$KRPgz+y!#mZn@qWbcp6#iC6EdoxMqSU4k)5>BRWsZ-_JFk23 z93Pio!gU{Y9T&+7qqW93E)}BfOsF!|`6fO)@TZP4SD{IFE;Q*<^K|w>Y+tUzqhLy~ zkZO?wYg()!i1LHJMAG6yoMY0}&nZ9<}t!-g%Lm3PHo(#OXq=$^I^QF8C{o44tJ z(QMag|Fub2nj){ZkirOrHpvJe4FhoIEF=7M2MMo zMXn#3I3S~jiQb;`aN7SY4rFvJO)+9j&2URZZy=&5BcrTD>LKaCH(s75DhO7s+r&AP zbT7!n0lBWRdwdTTGar}8jE-x8;PRL_A!EFipB2c0CN?@%&I06~O^MhAZ<$9;EO7zj z&V^by77wn&*$shXGK~86|H>ZZ{{`yNO zmU03w_Qy4lZ)2Thw2+7&9PxN`ibugN2GRogP}8bUQ}Rg5yNGUtDs?5-QI(2mf>JM` zDtCiEr&Nexhuj^tri=3n2JVi%huVSRgj_VI`l;){3~j2%J}eo8VcLUSB z{rNMdX*Z}rBI^v{Vco;HZhclL{l8but zNWHn0el=v@3LQS!JKTjCVlH>;D(?01$)Jm3U%|u%dOQB*rz^05)J;}YDtM)EMpwOo z#xa_@qRp1)(#(y_%F(|=^gy$5_!l#A{#d<=d~S2Iay6cj!?YV6)<|=2^_I?_;b3A3 zdcD=*)$sKepA)p8a>SN5vn?#hfdvbT4VpaF*}4VMS&#{-Q}>PS-Zw~xxMEmE2l>cE z-a-%OexS`<=;J;oqDN`g^3=Kg6NiSjY(etDB+qw&F5#0`8$B2^SE$Vgvrpf$7V5Mt zOeX5FlM`}@~n-E>PQ=N*!C~M z8VaE+c6iOBlR8kwq_E1%WQ!&bdG9D@H#;qC)6w0k%%j+ZJ*99b6Q^!U(M>1%sYLuh zzQf?*dJ{FPU2S(T;nY|$3D}{1spxsJH<@28Fr%)o7$P}V!X6Jn+q$6JOClo22ANZ1;LvJ`R2x=GPUMr|jJRwE{5 zWBn-R`OCD*WT+Z8tW=+99}!+=X=k$YgV-yL8lBJ(nCIeMBIDg*9KBjg%r2wU9mClM zNnC{;C#CREX|Q9~c`rPSI&$n)-8maM&g2mrVLmdd&%M7>!G+3bg~C&x&Q@-;$WbPO zP|u|iu?uO0%%V2fT3MwQODEp_q`RANXT#LW`13tz{B z*pUE-OUt!>E9TdQ58ohfE}|;(NY528p6tgzNSYo`>m&F4{5t)nDSV>T34rp{J*dn~ z^ADPprXMt24;rTD`9bx(Au!n)PrKs*6y=chPl^d%aVr~1dS?PTP{$pBi&UB1 z9x9si3hPho9y)ZRII+SnP4T(sIniPjWTF>XE1rqNk=z%)!WtfP=5^Jr;t3~YV2uBN z_vD)O<^+$nHk1)!L2E*K908JW4~^$0d%CdHF?`aqSf2DJ4Ei&7)*Fo_WPWc$(GUxv zLeuJ@?1G`NtO#)l583_koE+o^{Q=d??D-T+EMIR-G1l8qJV{?;iREl)xiEa4@<&!v zAcbAvA+`k`*EHqYrMdEnLgEZ_P%U4QTOuhe16GDNT3DZKN)r6E3wh%O$MHJmbOEr~ zZ>{&Z_Wv8_hEpa`0I;}MkFQdW9xk<>qJsAkye@NhAU`)$Xw-z3n-O;;N^%AYACf}j zx84c6E9wYL5dCRf8|aL~kzP?Sbv2RJKMuL9@UfhIG!|V~veE}QNmcr_u|#DHF0k|v z-B;%32sE4|*NuVb(lbI@-6K;}86oX)Dixx7ifs4lLPnPj(@hHgjg*@*3J_0&m)ae} zQCRMaWJZ~$Y)W-0M@of~fjKdvf^UBOMKs-3tdl)PrYT#;O##}F1DKc9IVaP*oq z-;+sGDm#TRc&3;O0hMQVA4Y8aC}Uwii-ox&&I`S>p(Y<4Px|z}i_ntPj`TO)n2-@| zPcV~sgbtp>KohTSl=GHT8A^DVVvH3zb;MEbG%A0HQx|8()p3c+iK1-ZPcU=SthU`7 ziVGLgnruY@o5bmBCp67{302+DF4JrM|452DLvi9%=62G>NHe;bLt~)axxwv|GrGAy zmdun(whoo(jAtY>?7Le!>HJV`#t)I?d{;@SA35J8eiZ*S1VK_r84eYvStfi&FB6g= z&4or{l?zRfq@f8Cu^kn;N|4TELKCFf(6B}}G+t5&jhAFY_wGg+_R}&;&^u z8Y3CpzAr7uL7EF|kmkZ_q#WuvCP9i{-ru>EUX^YuqN+8h-R2l}-xj&nB1hn zbX@OJD{3ZIi6qr<@i6vP!%0#N7oVbrlcX9hUPTQjNi|&jiW*MhHMCL4#5|Ft8ZLgu z57lszRKvxusNp23hKpZO!%0#N7r&y0lLQTEfO0X9C8>sspY=mDoFvt7@hfULNvh%E zSJZHlRKvxusNp1DLmRA2%o9nf;o@ifPz@(ZHC+6P8cvdGxcC({oFvt7@hfULiPzw^ zxN=N~kVYXEr0$2M!7sX3fptGrE3t0`sr#&ba-Xq3TxQ=0tbJlCep6sCG6 zYfTtc&j@pRrT*peUrpxAKv9_bmoE!OuOvN9))(VvgsFe|vZ4MNVX9|}LeW1X%;}Y; zrzuEY&yQhp<)tXh=@tDmdTDz45zrd`<;siEEA=l|UQ{n%UW&pre);lZ^h)AqiiF8O z)ic7>KT{;~dL{muB2m;c!qh)gB=UL%|J=wgn|}pi@Gpom`BxC8dZtL&aEhK0=JZPa z%a#{0SyEmK!qmT#@)Gn)($f@)V*HFS^{=G7h<`?y>X{-@^v?)$dZp=U3X|9KHl7IOI#McPl%KLB@MaDlPO#Lg0ih8C{r2ZLEUa!PIQs* zyd>9k6i2CVEZbVZAJK{aQvc%8xN!! zj$hQsjT3z2eV35eE3{KC(Q=chYSc9DX&{ZL=$~oab9x$-qMm8oQ#~Wf>y^Z>q}`Xu zo5nr$&xnftnZ`Y*R~kRlxTktXRP-;~?n@MmC~o&93zM2HD?C^;mPn1`TAh)GwkBuQ zv?h67ZB25zTF`PWuEdYpieyEK(J}3Wi+zx0+cs}iLLH|y`MIZ}~Lxrg=;KGoqq@xt7nE zEVg_qG|gM;pAi-PGtFC0PyKUsU&giKWm2=b<;zJz%a@aemMAGPYUV+ zd#?wcqB}pfN+}nIx~4=PykKi|n~A-3B)!>WT5ci1-n%WEw+#;M!ofb92e;x1^ewLW zo0^LQm_#m)Jf3DzN8}3i_2f>2j-lqQp*SqGxx#072ybJVl-SbDqAl?L@NB(y;v_>^ z?_z;H2YN#RG-gcL#$cR|L0nf&Hc9tC5Fj<-0)wr;dnlH4-kTJw^a28uYIcF}(%FY@ zw;uD%1=HB&m$F2IxmxJu6rK2X*s1icg!sY(+GE2e3J3NwSHm3Np@3RqeRYrGc09d( zmYve>3>;fP+X49egyX$~lg0z$;jkRbp`)DmIV4>$?JO0Oj#UnvB@SpGTZ0RkJhSj_ z@|*dUqt!l+Bye~7)#X;-y4;GciK-U)ys48dP>VQ~0BzESinz0(MGD9Iq!&2k4%V;p zWiMk*9G9hsxCm!IZ8K?wOK>HC*l)x)xw&+0yBi`Vaa*OHd%V_B|In9{{iBN|^g)lQ z;dB%as5gsm0?@R^!5*r_!EuebCV>XA>o2fB$uXNG4xbF`B<{jvB5T*dSZ3YCC`pu*oA1-KGN?8{u{#XgYJ|c1)@)jtweF${S)GH)NyZ z(5c^nyQhxbaqY#xbk4#iCF8ZJyWrx$7{fp;VutAPtxOsn@fLg+KN9+I8-5gT>o^D` z(Kvlgf{35NRR}}i)#coy%3+fQI2eNy94E~zQ&A(bdHb$G^xo7^!72N6vXy?BF2~tW z850Xyzz`dA6CMAI$`*4>YG7A1j@@ifDPhqh4(y^s)+kEOmdQb|rtPf}Yl!5mAhM$; zw9!o&*xiVOzQw$<3mh5iSeM91`-ng!k6L3a*T?AKQlo)`IVd19_(+q$yR^43a}8ma zqUs&l1oDS5#wXLWTBsZdeKvfOQ6?|oFiPBzf;761B8Mvx?DH}eqLVFo=iyX{4HY~# zpyiID8wwgd5klI9Cpo)fW@7Kjh8Kr{)s{9CV6mVf=KdiB8HEbFI+-aucD0iM-!LUY zjwerXcL*8Ihs4dl-l;Py?8K~fOJ$7x3dzQgw#Z>*XPofQkhJ}9ziQ|rF{yxbJK4lO ziq}LO*|_mBcVq}jFLy;vA*x6v)G`b%>fG5Q#F2~+m>ylKA}RCoNgV9w6sdAk>dEnf zGIm%`caPZyIg6%yw6n6YgE_b#RK&`53|KZ=Cbye&d`a>>U+8pZA6X%o@w; zoPV)n`Xx^3mvP8HYjoJM7Ct&9&E4Ba&4l|+^8;?@BmEASW5|=c?n0iTt1+C~K{}5v zxhEr-Vd-vviI_e*Lu59n%9Ha_?Iw@0COt_i@qTqlCH+acoxdq9zDI2`zGMw^igNMV zdP)Xv#l*FOyj53zZm8i=6Wa2~&3B>cK?5Nyt+etGMkDe}+s6Hce#IO0-1T|!J$pfw z#!=3V6djR;)BRE*a>dsH#~y|TFXkgB;)bgr-i^Tu@_Vg7i3^+hu@%#vxpa<-gVoGB zDD#{LBjzJ zRT4KkXeE}bD;3{x1P3m2OTH)$yO=$6EzTt@OA;Th zbQfz&XEu(_c1C7KCnh%U*fxxJ4^!KBY@@@tsSus3gBvZat8|AV3X12)t}1kb_0e91 zuFH^G;l32CXCQ^cTbEC7@R8<27rDkdeXXpk_}VvL6PxRr5YRy2l)nuGfwbcQfO9h5 z;|%N#cu(4~_k5;yeWil4XYnt_&hslL6PzyI$XA-3jpT|qfq+#i%|@evQim6QF}$hL zKia8adZP<}Fwsn&RhEvPOc?2yjn~n z)#Cv0U9#)0xd;K>IJ=P`uznH-;+;$`;Ai_+E_l6;!Mcz^yGDHu<@sz^RE4 zI*c!;*@yIGRNw7ct8ePt+j*Rw_eE;b5Y02Gv4W#t0A2_jML=BWg=77f#Spxg79ii(Pe zNeL{%)QU;Yeey{`5wkiw9a&JG#L-m{`Me&v^FB4Ya$s;;X5eEeGxAOzzt_G(h+f&gF5 z+H`HCTBS}X2t8Z6qKrTrhKxi?x)m(o<1ydKf)P9}OzYzedc1qCF3+PBb{0g^qYHX8 zEL4<9zk{m=*EOQj64}9bu*H@cK2#Q4{{tfkvV!7?=0O&i@bwA)G6t~i+5mEf#?Ur` z;6z8GlD0+x=sc>iMTeY$YTyp#1szScja4RZ`}5TU>15O z@TB#7HHwncN$(Ui)hX89cad-j(k|vI~4Pkp4{es z5;5)R2#VXzd0b^y$NHrfH#Hl%kR-OGFJjzexoT2D6TfX6GMt+JqGWrSWarMEIh_%h zgD5Mb&Lr>6NQR$bozy#QF-2P#>Tjqw;?!g-HYKTHp;SZ#^=asMamspbl&X%4FB1j* zksLElURKW}JMqy5MkY_D?iJH-g|2nqcmj$Un}Xa77YkxwN9pC+aXJV)lMvp$Nes`k zC6Ae@ql;eV>gaS@8!d9)h^Ck8$#esod(^V$9<|iCM=b{K@gkRkI%2f4;X)9sm^hiV zr(p8qMNfJePi*wXC|IF@9*jqsc#hsE*#$-=I!G}ur3Yyorfl;LYuViH>XLBx2H{6L z@F^O-(mO^xIs>OL)FW3sW#z}X6a`_0@hMm`YVyNKaMH16V2N9vg>cb#EUeL)@h{Y= zkP{~vlzXpryy~A#{!@^}17f-s&GB3pM#bCl^d;Or(g4oO?fBI*b+B?#yX$U;_OxxN zVN?@RAr=>oRlw++-{~xCn$l#>EG}$BOvd)9oVIpoimxZ+SaFNbR6M>| zHMqwHIdJY~>yr!;UueCd5Qzm1ki8$9dO&$LYmAv80Tx+LRtuhFu;nJ}4TW1xXu#do z*c50?{I)uJl}EQ>9_V#`U5&WObG{3BLje^F8cw-d_#{(Hg0rDOs0j^)e4(VY(u?6a z+4$mj{-qxuC7<~!cwy6Z@brs6pUE%&h{Zo?1q1)Uw-x!JpO%2C6%MyDOPJExkx-in`n#5Rr7k5ND@SR(X>k1 z_QBsu?S<7|BRD`Iq06F4=&y#BM@kDD|9(fW7+dWx?Bw(?iGyv*M$0Eudxb6+R{PC< zrz(!H56k^*`Cr(n>zUyv;>hea{*@yl)>Xp#OK5uP+-=Cu4V5r8q1AVG-;9i*P8bqb zg(!99(oR>8U;_gSNe%qQI7oi)#g2+@vqn>aV2`1Fi1~0B@v(_O?zR+XI=17;JH@^@ zm>5eKVFel)WfiQ+>tKhCeh;9n_0~ATgqvb<)ukBfw|bRkee>|Pop{-%2ekT!aiYgI zOx{q07h9eAYO8`viRV`rz~8x5oCOAk|D-pM+b$O?HDp-70ejnb;w{10qv~{R$FQ<=xh108*Y@7_+uM6e6)p~UoL=6S^Z~Imd>Uu zgH3pnY{HXd6P_fSD4)@O%4&Tv*+d1bDONTittU32x9G#e#1wGKe7O)o%IQCca&!*O zN6V#7TKb%zydD_?v*t7yftaO_R`{%mLUi<$SX5clfPb1bf7T>e5t32ZBVRTCu_nrt zsgyD`K?()yxKM08GGXe}*aWn1etZqFP@{#EU_}w91UVPdjr058jq~+xlu=Lj%^Rco%C+`85Ns_GhVrKb}21JPE91R2a^oj*Far%g3b z>q&ya23YXltux3yuXGU(%X6m~ytDyzw%dUyL0lI={fd(sT#>g%eouP*)X8*1TovE? zBMrXg1>aA$rnzBht*HnnQC996Tkvo1u7%KX0meY}1JNik!QUVzSF$$a{;Y;a4E z%3)U_9?4RB!GM^pe+|6tq)7A(eZ&Jb#L{2y*f?7qNlj9bEZZ0Sdeh>ml}Pjq zy-;Fg>zO2bwq!VUQ`KvFlFE$oJ#xUvr4tp;gSafcQl#TbCIj&p6VoWUFDyb_t@hMd zE+k0p1%pntg#&gZdWJsYiEDilY(2JJmWkDV3D$pNR80r-s3yorMzhSSH!Z&HF&X-Z zCt2HLvGv$?Lrjvi-bhc<_xAK;lpDE{^B^uupK&GQLp;XBoG|hw(Sg|XSWYBNkE1>| zR{~BX%hG3Dahynsu@_EA5sH-w1D#Ay$_ZYVhMqYuxGB%2V%Jrn;y%Pgz0fDh|Q%p z)xwWtS^A7Cju%NW_QDA%P)Rvq)rCY2u%;)cK1OVNK%_IP&$yCvBBs(Lx?(WS5Tc~K zFmfc73ww^_Z7}lb%}vCSxJ>7PFF9A@u_l%fW9kJ4C7NBtrpNLmVR~E(Vsj2vJgA7&(&4 zg*`{|HW>Nz<|g7uT&DBDmz*o{SQASKxYy&j5}O{&lZ5GUEr`vPfFH@S^chziFOp*H zg%c>3$Z8nqWO`CgSkseJFLU+8iI^;X#+95Cu^4;dgds$+x&k~xYK$C7xna+dybVUa zo;VVh={)cy=Sn=*IKJ>QH7(at0IC3Mbc@PX^zpiS`&t?=^z}b5P0NK8o2E!Pkwo#= z3yJR4Vh>CIsbMS@YTOHf_I$}%Thl*6P+pS2mv0r7;DSoQAi4-WSG=F!dRe*tHHCgr zW@3@_Vfz8?_T;;&Y5S<4vM?bOclF!zo?i>TkkbhU5=pwr&T(jxfCH+d*^` z=er!uq4EpAoPpFuqL6I?*Lmehd{4&QB4PpN;{@KKYFhrN6+Oj|i>hO?h&0*&A#jOz zx|FNj3ZM&OOK^hRr$?hXhYbSxkng-bS=K6!Z(1S7T1m+&Ui6^W;WFb2&SMA_oM7v- z+)2;1lI6gqY&zxl<2wV`fKh3Hj0$im+uE`PW%>>>WH7LbXJEwxE%ORwc#-RW;+FBs6#0bZ68VIc z68VHh68QvTVEsP&!w5`aT!^;jSJ4hw>=9aE+z=_o(4qR?_GWa4d1_!W}@tN5nj^eN?!vzYM z3M)bIQzUMZWwZSG$q)7w(u!sOxG8Z+e$p?XYGP;0`8?UaDxij-H9EFXH5~&?-=I5pC1o@M}tEc{SZ>vtDd!^Q((`aG`&8vhdG!XJfF+^zrnzDN7__^0aB?zR8yAA9{!{sq(i+C7GhSZ4OGsQ`En2;vxCT6`WO~(?g zm$`GR{Z$nf9F?`JL6D{Ijd~?X36tO{*yYJ6C73J=S#I$)DS+r%dl<~Nl_BYj!KMqB z(T4@3-6E4we9tCBFrEI-D1){dj%Dx3s__Nug`ygL5yD*M11CKnDI)%w=z&vC=={O=;kED zrpL&n*`Wp}xO=Q!ZKlKu0ooR?d`ux7cw{Tb9~+S_iJ&*$=(0_vj}#b^2oGjmS&glI zy(^(*q7>8081aXI%IjBhtJlk{fGy-J=VDXPjj(T)W||UZ0SYV$gi|D-cZ$kZ(}$A0 zxJtr+fwR<3o_k=HX~0ouLO4FLgQJSJ-W4(;IAt>jR$3Ay6yQKjEsyG^InxJ0sf^Mr z=ukER=*}4M>{S&N`cWxEQcUckO?p{tkD{PW-))vn6l1wHk5cffd6dH1bknud$t5!+ z2R}^ySJmDp>gGbmcf?>i*mJbfWkoB<&{49S&NIeNbZY*3Uu9J-(8XSr$4X$)=oQt~ zKFnz-sNnY9hi^9YeL7U(U%Pe#pJ1v&pYiR_{fqQi(7*@GD=jLz%We6Z=Y>+{@!}eI z9Pz=28vEs)5_wi!a+)OQw02H`S)u4Bk;N+bNwU~P&6bBNmUl~G&*}8+3+|}<$>#Q( z5dw?RO*!|Mty;q&cG+*jB8ZFG^}ZB5vcoK@Be(=rwV5vgS zP_e33d}M_l7}PH|m{^Dna~9r_Q<~?dGigQ(C5*n~6AObS6(ByYrkCcc`eU;S!=h)Q z3-DueTo5x1?PWdw0@y(a1sYu}h#@w5Nu>!Wo20*Q57k)NFE|idTHg2hkI`rktP51&6i0YV`{Lsx=i8 zYHG?Sh^O(md_aDdnvj~P(1uwAA$QNdA|c^%D-{wx>%PkJ)kXKF&Unf2#Sxw*y_7C9$X<#{3l4k*L~LDR#@s?F)LkE z>0P_33b<}fklRyT?yp@~y;iykiLzJ_-b%8HMHE6M`K*6S8Z_%5%V6h5VZA9A&gIqm z2YLI=X9JVuG~%#0E{QY4UN~hn)pTXvsM<;q5TJRF&W}X-R#oA%(LA~DDOW}HtZJ-c zR8{0|5SN5idwa@$Us-KY8BX2tHK($_5>>vIGcBNxB=(T2maiqNtmr)-7G(5VZ?%;I zu@l61StrOD*aRNY*Wqkn?SujfCa|oH=b@dT6K3N`ID*>~<}c)WvG~SPov0c9DryMn zU=OYEtn$|4s={(w;lhVyyk+GGA~EWoI9aC8_bL|pSHL&K!UlPmEIk#w%Wi_gaf0CikIO!dM~7w3hr?Vg6{S(c?}!EGCd7 zGQzeIJ2|99Jkv9i*Ab7v7M;5AelDzp1@U<|&^oIiLtMp)3iIjXN%-7GnRnf)DtE2^ zDP^DVvd}{MWZU?xNt32d#kv@W72FjZ>!c4V>50?mAmN%yk1t^w7UM)gTM1g2qY^gY z`7B73+s8M2`?1wA$3kRm0HY_xq($V?86aTxk8X=L(*lq^FG+$OVtfKy zM+f#Tuzn$&n5L(Z`I4W%6g3F@z#wTM;^6Z0-PT^9Z(X~~x#_uBm#-b4HF44{)2Gnq zSZvJ}@X7rVSXAXJtNDUDjW8KvYw&^_zR0xkLefyNk#NBhM}8WvMeetql6a(zDhAfV zc``m`SSJi$*uijXErvlocBUICdx6^W`zmoDvQmt1azwRf@$;p036szth6R)wj0h1; zW{k+N5ET)swZ(>wgqY~C0k=gD4QNa}(14Rcu?1j_6zG6GvS_5BOp+7=%K#bsNr^Zz z$3x$ztE@2e8I6=GEyLFrEGp-TG)8m@4l9Jz>|eirKL>}nq3QjU$jW{?YvdB z2;;(^S;G%(91^BiufUAz{>sH=Yy7l64ezm}%y-|d)gBR=xD}o@<~zEpk{nM>8I0&+ zF)$W0PWI->tR$=#3rPO8=Tm^M3QUSlut!Y3ITV(hQjwLsvGp}rQSC!U3iaa~)Lv*; zA9CkaV(Nb$`E&8r=Czezd>?R=im#+i3(52HCJgy4(B!#RS8m9|VnUA@N^6oQC!1m? z>}&SLdajP=66~7voUfWbgwcn5TxCxUFe~gSmswp;xwx_-+<{e*oMD^?BiPE7J>@c~ z>NTrLTCZ8LD29)$vTv81K-{?p!%~}z5EwR|`0itesMqY=>b_^k1c-M2^%eW9vMOBn zh21B8C;~fGv8Hm7XvMATY;_>MC(Pm~%!Lho6CmmM#HJTv?beoouIL?Q=^tHtfLkP0 z!dnvVIuEyo+W`MWAd(v+go+qYu{9zFDAurJfV|?UuVTlhS+^|6G)x~v#ro)HU7i$q zY#SK_D0VA@guMt?@JKbZR=cm!weky zJ|mIWKw#Mvg4wt9{KTFTkyAJif)26n8V}biGq9RV@G;d{mWq>%e(TsPz!)Taw&ZGN zWF$pHHhc%0F58=puiT!;Oly5s7OxrL*9`ObXIHNc5qy%RSy{9}(;nexD7q#AG;Rf< z@BWpgEfpIs{F{YPTQ^V<3i7G&Mr{ytm4zGDuBcvfJ`36wqG~s+)sH?9Mw%??_^3i! zbTR9jowGRKy>#)MyrSZ~{8;e9**PWgz=g5d7Uay&TM!GJGe3VpPLVtTKy-+jW|b~j zSR9*q;q0QA;-!lU5c|`a!bNj)7UnOVHwOm{2-{M0>zrBaG@>;O5h^rimV7OkJ`K(` z#Up4tEd4HoO{NQ*IJcQBz&Lfmp^KPA{>0#7gob&0L!!ideY-*&VvtCNxun_)_dlj6 z(wH>b5uYFpn+o-0y?H!Y!mg@xm9ub6b8glK;cNi+cRvVlP-sFz$rk^wdA5zVp@VH6Q* zI0CT%OL9h80i~Ku+60WU#lkSOQ$#oc2ALv?`n^2wF)A?{YojcINI87 ztSNR~u%^U{kW8CXt8cR9t`&hip6`-n68?%L){-Vi+4uyZjrhv=L&q&GaB^iQgyZ-#R1@VL-!DAP1Ih%y+t?nO0l4Qi^JDDT2ZeUWd~VSlf_5 zo(Rr?apNo$<1t=Jv5*K0#@nBC`eFf+35H3dI_B}ABwH;yL8N<&s)@81mBnY5eoctK`kL*Io5+s;gJ0)&}EBs|^ z=H!vbC!S>jO*bkaO~N5GfE3BGvY*27yzof->zM(ja_RHs#e;w(JueMt=Ey`)_J?!f)vol? z^0tX4fj%KWw{{iGF+x^Uftg<{_`_W&UI&9}!g+BvR^5wPTE)7EB`=Ux#?p~6XH|t& z97NSzk*rsE_ckd4$Qa1zc!iO(#B?T;-gEIwsCCt)y`6vgWagRP1~09KKhp~ZlkI~yd$NQvV-U zV<3P|fGOStwFm*d78yb?D} zj+rnU-vn6nPlAM)@lE6wr*>(0wKxfoG1xs*5+!TJ23Gxa9k-mnLuGFe?J%^fkO+0h zutx&v%V?EeyHMxgmRq<&xPrdegU>y1MHU$L*9#Dx=AX5uthUxNzVK1{B}G=vWDw0E zByc@u$7^7#@KI?`IfkC0%kaW)(Fd_(sp*C+GjvnJP8oW(q{G>_aCr!I$@d(9kY7J@ID83$i)9CfBcx|4>?iL<)*! zgBCRe99R&)Jxf=!qG~LeTiIf~3Ik*vWd+2(Z;WfO>=C1P@^18U>+xQ>w#K(XZr{2v zy+ZVnwl(!rrz951rUcuChUU(xK@5ga~LRV{D(Q#YQA{Qm{YSVGbY|ud2PcTHt){Yguo44`O3b zKf6pIkv%5m&vtVQF~mB<75j;7AK1esHhypA1o{viW)HM3LWL~I9g#MBDUIhMG<6S89tJ+VLnIYY*7x;1Nvqu%F3>v=!2rNDr|@H#_JEP zyuO`^itwx0OhvEgvphs7%f-beLNlf9Huq7v@e#I_v<_x-$!eKScNGRE2nx1H@Bx0^ zow^{~zK*BM{S^m^1^ixxGa@zft8p>`G1OJHr8q=kdBqe1Ybp?RJqIxaLJih0DZ+&m z`l~@==MxGc-J&Y;R6|D9?KSh3liV;tLT1|N&S^y9gW4HEfttWGlWr) zAP#N_I9WakEyBku@l8v^3QDjDBnflKMqR?^;Px`y%Ypml_*gwL#YizxnP@Dd1Zxd;RDk4aFLtzh2!#E36_swvhb~ffGh)WJO&?c1Fjn1eUt$QV`hz?K7KNN z?dklQylU+o2)dWfT6n=NHZe#s&}U<%<+W(VYF?GXM{e;!!d2Y#NfXN^y73Rz2;vj7 zDziQAtV)WVBuJcwl3CL{Xl{bUsTD|^nj~>bS(ZC%N)oh_SCqT6Ca-|EoB-`4DmlrM zFtHN!B%!qe#VS1LxpJ}ip zB{3P(rcZQFOU#j}*%RGU6C)%>PN_)PJ(J5OxhE$sMNCY>!z?6afsDS$txtTM7E+H( zD8xr*IcWtGw3im^}tFXe2_0e*iAk|_0;8ktq+Ws<%P=HIsHaQ9}tc1IA zAC|Q)gs}1BC#)17sO9J+dP2}>xu(v<&p^B`@@^pZ$*!ne%X@{4H#jV260;fM!)m`B zb|JJ%QQ?p1_Lq$UiDaa30g7;!k-T0QuKr-j&duHWWE@3~&gV)6ZL*<%EX>qZ^ekAB3rlKb0KLLpm9It?Gx z_LXVf1n6I+_OanY2)`U3cqZqNPlibOj|EeA;w#bkj9*{6lW(|~P!25=PsD8FtzXSF zv7n`8_}Fqargmaw4I2e2@G=LT%iD7G!@RejqTMeCzfsGMTsVu7m?$jqbfk_lvVIb_O2scJ`b+-lS5t#$?T0S-s%hlCoN{jitiOfl|1k za2|P!`D-fIVr9pejFSwI2;x329S^v#Lv@hooOn1LP^&G$-hN)1jV(nhkXRTObj`ue zduh3(8t|ex_Ses;DE1`Gqt{M-8DF>9l%-#tML6~REE4erpn0O2!cyz_tCvEuNC3Ae zCXAywB6~b05p$sJJS<_eE7#DWHKTq3MMoe9279YKRZmuv~{4)wmG$;NPJ%|gpkIjiT4;W z5rF~jJQfB&Rge*zKqMqik#0reL=seP7KN1j7DFLO1Uu-;!MMs0J;$PVIqVLpiJciG zbZ##eSX#x$`AqPl>VkrN{D0OW6DI1MU%4(ZtwK|*Y4@=t@xap;vtC2DDo#vLpBvQn|(h{nOmaP!`DKB2Qv`;$d!HqmLC#hVE5naEN2>=t`uQQ)^OeU?g zCO`)?MK=)f*k{0izOa-Q>Ae#$%{Lgzkp41MAdy6pRak`4SV|{?()w-5pw^N=v?E|b zdjw%BXVF#(T{`VaSkn5ozp|w;VX|FY1D)hHF)5FyaT?KSDu! z@$9?b!S8O`sU%`Nec=^#q@`=U>#A#NS72)*y4_z>gF^-V>fZ$DB>&jXl#n6H<=Tq9 z1-chTd+gR!j#^8fIIeVD{JY43iyXMffr}it$bpL-xX6Kv9Jt7ViyXMffr}jY{}2aW zKJ&lbgV3G<_%99rjlh3LFL5{;9T^TMo-&JmE@hskB%3tGfEPryS!+~Fyna$xyb=2vvZY;>sB?*{g`&R%MOT+U29_sLdVEQFG z^*`4@frHut94PF*PlRvdaUA%=P{(^{2K}O$=AXnt0Jpnb>@Ae3v2^U(H`Gz}-wp@; zrkWUR_<*At5nCfQ7RSWRAmUDkgMO_zi~@LYyZt@VG4Yjj$JNM3zgB+4;HX-MgjYw{*umbOQZa=^)vz zmYsvP;9QzXSS%d}-c5HL`U+TqUs=S=ET7_K!p@JU1`Km#T7say7T99cBXaR3z_nPR5{AR8UNGBgN>!ict5I(}0+ z%uxqM{bp)UIB0PQ4MGSv5sq<7(4T0_xLbO{VUUmz$1m;?bo}DB9&wcUc%e$r65E#1 z_YQMB20BK6y(b(s^4K?%5yy|6WoQeMcINbi18Zn3BZ4KdbWB_^%+UZG6LWjQVJx`a zkF9}mbo?GTGSM%;?-7SET)Ljb(y_06m}3p-*f*;uI?$HNmDTuQ7XQWKm{Ku}$L}e5 zJ>ghIw`1sH8rPN*;2=9((gP0C)#>=p?VdMh{vG*wb9CRJ23lDIYYTmuz9NnN0m`fY zk-oV@2!*cb%yb`8%Le2!N_M2I_j%AiQ9D~5@lpgDth0Q6vtv@k-BbjlN zSW!PPZylH7sTbT>CQF7FNsM!;4d=fw_8xdLtIWHix+)1$P6Gz&Q#-BXZS+X%oZ>rH z`4Xe$qgqLgQ$C-6<*!0mM8ldx^28<^ zz0=Pa@YU%gd@+)lew*Go3Q}YBZe@A78&`=N3PF8j>-))Gl=)gu`jAsolcbYoO%Q3a zoi+G1<#a6Gdgi6&V=iJVKy4D1#%JWVf74puRXOmQ#yNYC;e_AwFnVqllv@AZ2k;V~ z$a65-bH#U{evkLWClV|ZN8+Z~^T>MaGB_2`9{EN%=+SMqzf$$@_wMm{#w#Nmm~nVtxHxb;gUc+} zid^bG4#uARpHWI)tGcKDCC5yM!}EVer6_ra!pkuo4R<^`)N!(HrY~!2)4vQwGZPG-ktHU3EHqcs%!f_&% z3Q(?-dq(*tZ*AHp3Vfw4bu7L4hqc@jT#hnP zIr=@>mf{<;wdpZY?#l4;M+cY%)_+T+P-e<;vTYP)ep1i;?VvUD*F_3trW_~RGAQ#C zdgfm&w`R@|DU_LVWbF#Pkg@z8bksKLuZ|_%(Wo-A4&*wxzhr0K>mm}SpoY0-pM8XSL8iI7_XYWx8cGFcQo#=r7ToeA6_jaQke;a>jJ0wvGyIpl0gmvPf2N?E%)sU7+325zOBO$u<#jl;d{^Tx zCI5i(r`>_hqk&ytX&HqM3!EOM6m(|oZ#?OnC=@fa^F|l-u`)8x;W)Y5>AR%v8xG&# zKS25&uf9L{P+|LrIoY3V{CgxNYu9o&Nr7Eop{|)i0`@kY8-!klT2TGrqn}5k;Xgbw z)DeCi!RN3OQW2haxx*1^I)ZF!>gcw-(JrD1zp40fgg<&`phF;W1YXEoe(xTVH?+gk z29er3GbNQPkEvg_qHg*xhdL6a@4WOT2PJU(fKShVE$6pcqis|l_!l^y&bi#79g~RE zDWk&+zvOV#KR*p`^yj}kJZa2OhuTa4aJgYGfRt?+vS|!O`@$a~PYdFUlqL8SezkjD z+N{*ZUB0xL>a5hr7%e|jE6UJH)76EU>K*CotckVbXwA1$DX>!=F*^Fh$>(8(_XfIC{W)y|2rK7| zG76K(!yqzpW#F{acY|kJq?=mt_?0rR+8KBuojX0yo#OwWFttAH!ao*!jUgcXPwHxb z$sXVx5^yu+^uRQux9sx5{GG?SmuoF=4@7gKO2ZJ)7i#k2-|VKxThbj$!)ag$H9h+8 zU^7_xDHfVSP5&X^{?2bhW}tof;ZW1{=t?#JSg7d+emELxIz$=skA#}WGUSlze~tTJ zD^Ar4U21-3pv$S{A5-%3!`iwG&7H0-$y7^^2fpFZN{{*nXr+hLMWaW6lfyBfWvaf> z8R{|&Z289la%uUU#A7Z02vK$yXwe=V-Wc`&O!L1MY8pp10-i(gCT<_BptP6T?BQ+1 zCr2Bth|>>6iXDyn)qVc=+c-D9YfY~cUv~K}BTVaV9O`Ie2&DyHn8!U5BhTB$P`M%( z#=HD>b=$l@frt4;>1uFW>M)4E#a=I2Tz~usjhuwdtu+_^2iVv+@8f7x1J63O=9}Ij zz^?!}p=30V#M=qw(#D_4_baJrL<$a@5L(MAX0e_!>iiVoE$+x>+NBW+|x0D9j_z-IT zSAmICD*SbnZGjzQoe$t4)cpTglCPy?QZzCN6`cG_OLFx6fsU+`ls22w{?n57KGJkk z(J+>ie{V^C0m&%%*e+%Ju8_}>(vgNN;oI}!c;bjR1Xy#ohSkKu236rH%qv{n76!ck^zlxp5~wH!}Mg|A^$g6}c#9jJGG09q}g38@{AoR$< zf1{*t((5CG_<0#W59a5k{5+JO7xD8jelEeY+9vdQ5Oufgcrl_7|EYah_zge$@KA>~ zh&p*5JvCCz8Vd%xlX8usT+@(dbn6cQ(He;+ZWMaG@I7XJLmj6Og?h@@kRm(WSE)4; z!FtkVNTSa66={t`ybeF}uF=uHNm?Vfg_t*DbPHL8@S8|SPd8o%-!*b6i-gulEDoHG zD$veG>QJC{QKLfB27^|iy0_(b`iH5V^)HZavxNx1{7?e>%WA(=tE+I3U10NU^S@ptrz(H7G7k*sSb5uVD8t8!|?8hF4zzf4UKaVdXM6GK6 zahMd+I~(i zl64&n1D#hChP_H{{a{e2;daVnrQ-0Rfewwa6bfV=A>@$udsbc74N7A@0Fgn;$eE5@ z^;PvvrDaH?&%lu1 z`lCSC73(IUS=vLvAESxR*66$3tW-2hb7_xrqaM&3_1+-$p(}~pKs5EiAT(6 zs3tY^6UwD-dZ8`<Dve3ZtD(vLd!;6)ipuFE4k@z{}rB6ts+Ua@Xy;Pg_Z@p=Fv zR|j_eC~*1;rTGfHX+%^53>M|G*8> z|KB<<%~=Oo8dBFaapR=AuIvZD7MwS*J%s;eX19BfhJ0zxP~O1y$aSK8L2zhsv|@e@5}%0XJCWan{yL8uo*qO5@YW(HPy38d^3o zs%?59k|tQccL2r_(P?DhE(vkB={`{Sc=J#P`M~tw_rTc~-ttzgLFpo}k}LLUqs3Z(6AC75tJ#zYSJW>Io{^MuYWe{5KB&(VmSN_|H0J(dR3| z-nrZIJCVVm`CW}Cm4<83xWFdzr7y=54bPkY0t2||c<3jOcBf;M@nr-yWuz!uK0_JN zpW1EYj6X&=Xk?`^J><>^=f6cV=!bF0$S!m#%_RNmr&=LRWiHp?Wx|>f_1ADdU$Iu0 z-ndJB+xInXHk*>AE^SGw`ibUGhv${9z6_7eMLrnJqMANBn$h@{ddUAO@DY;rufPDp z;^Xo2*FbL}Jnam%&=r{jW0HxQ!#5&_+SUkn@wo3cYS&*W-ym6NpS4h1VLD1Uv;ehO zEzD5=Ko8&(ID%R*zY*rh^p69_hZ7<+o(3D!rwDH&8KyzTBELHS#e8wOw#lW=7#+Uy z&mafG!}iNyJnZA=wT*B2Zqf!YZ)c1S)n8QYI|BriW@MM7`X*~7uEv9EtN$O7Z-nZ9^#c~x`v1f)VGGqiOi$>j zhSS6w!AdH!-#1Xb(-j$@F6MsxH^?12kGdkfie#`AIc5@@F$>F3F)|h%r-A1wBHn7h zwc8t`z8j=0g7$S8;b$>E62Bs)zzBqn@VawwmFjij7)@2GL;FL3A;csW~pSIGqa5eUbXoMxCYqnZBEB^j#(C!?4Qz`5^aa zA@?UuA4#-mLc>y>IyzdK-mx2!r8nl+FaR{q1XHUaMjii-G@HG##3z=9p8VMvjAxr% zdjDyYF&DU3_BG^dc}7@$L&_KTbxziPD}Q7Ad#KspUrNxAe|rgorHlyZ^G^#s%OhVR zX}9o)wBc7Mq_tcILeZBw8W`O~FTyR?C{gHr9Y4Zw`1V71$@PHLE@eNr5=m?$K92mS zUO$^b=$|yc+kV&uoJFq4Ww!d~rfLfy!TytKu;jm>7{NvS?^65=MUIL0EDt@rn6PY0 zhhmBOg%jkY!_Uhe?*CL>pBfphi}BAO7f8!ghXbr}ITh|;6Cuz^Wc-Vnz`H`fJ9`?a zOI6u7o{G4|!eLSA!o5z>nvcA7_alXNezAybPS+$6NG#ke<`DCtk$wZKdh! zHiUjZ+R=&0)@N8lz@Q{_%`*9)_g50&3`)hYaV-=KZ|H&%bsN*7L;P2$t#kIKUgGej z*KM5GJaY*clt^G z!h7TLXBzy;AoFM&fWuGd*{%A7EKnv$i%a|6>R&_XCZQW$n)=&+;@JgR*6owD4_HbH z&OkouzhE6QQ4Z=K3Wtr-!(mIcr=~xNOqZxdpFuP^s)PXTL%|V$23iPIsIKCBJovdn zfBKB3^)t-K(obldfx#Q}6lUdVx8;B4A5#AUpG$6zaNlpn-DOFG<4p-B#4!EjmHx3~oEDy%m5mu_G(9~kOjOV|tp>F*HM zN%U9NF0@D`;_(OidHfOaHEkb2o(;dm&glv*$d7GHn|+W zV)BkofH*a+kQy%KE>ysyPVs)&&%lXKfe|IYaw!5xfgzva4Pk?4=s|lX1^_uT z-?99C=IZZ*urvx}Y;pyj4^lP0D&UNM?^`F}S2r^RKn7J2$RycGB;WlvCi<y*ot+ z&Q5aVf0$&-3I`#7SK#>uszdocD2F#TgD8h;!Oj|Fhc`eG%=KfIXIA>v*Snm20qrfdGAk>S?%<{x(+(tbxp5feY@yHsnU zqF<+flr0;n(C?nYzl|sT>=^;9z8r39g_3=u?gjMf4)Veceb<_3#ZRrLGHr|s4|w7@ zEI&~?{Rw)Z{ORiNs0ooFG#^)=;_^&T)-Ltl;~d6IPeaT9Ks1frqiyQUen-iD2MMn5 zU-m$Qi^9$yQ=0Q%eh)lj-=X$4UJoroA*=yKw_OWPW$o&C2BV&~2@CFaWa%Xh-c&@MvvW_ zeL~4Sp_X>ScX5UPw43cl!g8;mY=$p*)v|l0!Yw^L&pv%i$l=#!`o(&;uFwOK4wo|IyHgS=tYq z=Y9lzc*{3E>tv|;GW1vWtW5uHs3!Wv5Ts}UA|IBBA!q&<(!Lju1N@!QCoVyHBqP-P zO9b{wdH&uJjb@!RS2GQH)cGswUvBE-GVO;=F9Ij(zmqC>d@EkGKM=Ru0@UC1*A}36 z`fFoi=!r8wOeHaK-6o`nZ0^rm(BCK3Q~u)!`!wAo37ZGP^x1-pH(Bh%Js2649R=yD zc7@@`WgR@V86o7bvb|s^RyzZmM>u=~Lj@Bf140EE+Wbtl=%_Y-xLR~X16N3@*jK!@ zeV`-!-vhyire6?wQ(&s!J`TIo@(_`$G!Az{UoNs5kW9wQQU&l1G=Zo@BCGV>})z90v5xC9-MtF(e~+WaYyd0HJ{w66j! z+H)Hd>PJK;Oep^JZ3Hl`vFI1G;~&&K;>&v$zBGISO=Rc^Kxqq%Fte=C*7)B}aKNw_=Z~{ImnT<%Uquj_J6tRKZbtFK*n(H+ps=xY>L9L&;!Gh zfi=|h(TAXnmzimiq6Yblv3)n>Db%z)f(#-?HPf2<3#8Iu=N}PjTC55ssCyQwnGf{J zV|$c_XOKNB8frSpRUB%|KMH^&)X?%G$SsU0vcEQU76$gDs)r`Ng`mIEa64oQ_EVd# zDHO8thruCrPx!B>j{BTqdLnp{+eY(ae~S=-IPwRegf>X?A5*!J6ar{E0aCR5LugNQ zi3TyR`tuF=>OYI+ZQB~*T|Z#e@r^auFEx!4J! zK1`7MmTn7t1;Yta-;x4cdVVj%2~yvZW`S>EI6>-LhFIW_GMpgwEtgo}KVvvS>RT?e zz@KI~LF!wsw7_>WoFMfrS6ko*8BUP;mTN8W%dp_5K1`7Mmg_9=1q>%heanp&_zH#- zBzhogS7dHr(@}KtG5=Q@-tr+--UQ){48s^r16HWcBV~2UF^YoG{)#xs+5d-u`bv_a zkyd@Q#-r+69{xbESZNqYcCMux?|&eLlk%;=;TjtLA3)j$QC9@oQt$A0Xe}p^4;Fkv z?D#!MbCbtNbBXBVyOD`(*xsFx^|#b_{72iGs385dHGL$Xw3agh*>$j=3ClNG%2QrZ z{)BvrKE4-ETGM;@7uAOEOC1W$r-mhB&##{&yFks9sWXWfSVck_eh8^C;|<#>S`YpQ zhs5ISn}wfl-B^A9a5UNimBd1{(r^c z9o|F1a2djK{g zm;w16qBW=dow@86tKGpm)SxwA1|XUcYQ7E+p&i#!9_$Y43@=W>Y$z@J(B`7hBR5mp z6F1^t4$tMcYm*}6T=KNbq1~T4JNwXsrwwG`U!!bbuggCXt69x80ch`tQ1kcbH`C12 zh)kj8e+QIUxbkR>_hpM`oBIcK>AK|&YMuW}`uhj3VkFjg^R8c8-%@f+=!ox%P}3V* zL?tPxgy%z%dEg2LVKC+@_JY}lq|;zRwuH1i@@0^P7Xt{Gp(9!Qvkr!7nF(9suEMZS z`w$I&i2kTQPW}ojj$3_QeMxH`)C5-NH)!~$QzyITb?&5vm!CZU{~?ZkriUJThae?GFEO)n6Alo8iAQ)SQF1c4Q*t z7Ha-mJst<+5iX*-=`r;bEg6UWPofG4KSw-Wu)L1&ix5%T*0$*}|Ba#Mt7Vt?en+FT z?-J^s(=>Qfm?f<(?YhN8-9}Ic4tfH(>O^T=4T?j}<7LTPQBrJ=>L!EQyp`a>{SRLY zr_1xKi`)56P7PU79U`@kxbOz2ZnLDm2P!CK52rj~N!ce;p5c@qTT=cDDV}FD5WrO$ z8aegfEUDW>>NZMU$*I4wq8m* z8cu=r*hghaO_5lKa=HDMlra1d&$FYL&gZ$@0ZZzONTnA1jZ@yRq&&qbD2e)-IrS|| z>Z1Z{J$iX`*!9XFL2;ik*dgO{M4mGbQVj;}``d=*Am(ugdKZ3Dpfy)Eg zp1kwbq7@mZ#$(S#cx3CDH0SQsFOKK61>1a7JrK%tWbfN}ipnWF=BIiBT`uLZ-Mii! z6kI$=*>M1quQcViyIVU31l}E~{C1x@KON%+rkeLkJ9IS&Q1__*ZCcSoFhNVS=5?(3 zz9LLO4~Ks8uk^Ox2W_sU5~Mllqr=DG)PTx+v;pXqVS$}&eU-*VXe-?Bf~;tuJL6e! zz@Y?ab4uh5?Cn{tHP;H%Wj54b4K@EC3u={7`>xRP9}Cr8PQ64cFftxxudm@4Qtb74 z|JIR#3bUe(Z;ARFoW%c4k7>;hqH?e~)J(=JwBvjDH?Zj;>^kiX|MTn+hc=C(q2vU# z<@1D&=C?3tzRShdD-N+9hd+WAKY(!t!J>B~_k#%&L(Siiz4@2laPsBUn|C5>upq5r zm(ut-76d{CX?w8`@&r9LFOc~^hhIYR;RbE+ZAFOkyavgse}RlOhsY!$5vu9IzeJQ51<^yP>N}C)TJv`Vi|K6$`FKj>w}DiB30D4(z#IMn^*172N<#s` zh2^Cb!{-_fi>Wn|O`WNxY5Ci*VP|FrHtQ5*(#|pbH`|4``RN2oZEGT4fyHnjx5+0h z{~?t(q=D@EovT3*{b3LKe{~JP+=H4&7UI{`G02K>jf41DVg@-V6Ww+TH$n++K$f0p3Wm-Ei3JJ@;TLp2r0m#*Ck_iN8%(@f@56}by9KNP_k$Cr zV9$Y4RgmFP7Pp>Imf^qU1v5@4<94Y96P4cQ&e zBbD#BD%-nSKN#l3Mu^SXz?VJ>_&)j%R;L@=>Ku5bzqUGx1k#`O@Kg9#4RU<4iJpu7 zZCtDSGf-QQsosw$N}W1UD|)Q{*_FBw7V=($^iciBppE#gz7*Q@6edL^{xg9kting9 z;3GLG>N}z4;*&rJhJ6C-tTz1=S-{jmT3Sc`IW%)xr~n(qI3B)(>9)vU9#Hp`$TIOq(c;*=Gk4nUeLSD zhSS(zN2qE4oaFD7;BOHj#@w8v>B9t?x?f8)S1=lEkhAmeQfryNyur<>`<5*8E@lye z`Mvfp)lbEZ`oAl2-7Il^U&m#ypRyTc?v!OdTql}drk9D4FY9{MCReDC#s3=Zp_V%Y zw#&jdfjeyt{7#IbKKhkJn$AdhZC3Ap6Q5gsSqvvss;%iE{L5BbS30Q%FgQ@t>){OxiaPZhR zI|I?d4~_`kmFda8l-6t1otIKW>#or8e<>D{buiF9*f&gMA(ksUE>(8y7W$KlJL66--d|#sF;Cgyny*m>dct5@YlyW>^W46^% zEiuN;68Ng^NOdW{eNmmA&iX>~F-p{_)xYx^ShmaeC2dot=BI;bP{P1^^zs#fU8Atv zSU(+G>#4VYegMml*9LZ>E(a_*Z-rrVzeqT+1I{?nL8EAsK#Y8w^ZQWK=2~Eb38slS z@kJl#regA5-;xJn=+Ad;sA;w(CmB-Yqypig$SLOJy1a|?W+cSnD%~tt=j%j})t>kE zPGNd$`Plc~%JY7PK+8`-ki$1DeCzQcj@x+Y1yKNFo#VC6Az&BFVVpeBeh9PtnMk7Y zqd!SnKAt|yhGEhd{k-N~ketB!3AKB@-frmgp8Abfmv-6lwC zW?)k$CW3)Yqp*G%+EPVD(n4DbsR)Su@Gm4VGg$Z3($|D%;#!3E84mioe}gCDKk8A} z!8bVOQ47;VEV!+Z`OsE4hS#0#QpUXJ$=)kAp=$ZBY1_{D5b4XM;IRj54$AiZv{F}eRN4NCMLq%WWDoHVMh;K* z+!SBBmYW{fjf1?{?>YfRzY3a&3bk;IR&>OZ{c`P19(7;VLC>j^3H7qH$k*})YkkF%J$CbSRVQ*YNB{;$nQSvS^Fc?#{JLFKZw%Pmx=M5dw~h`z4qNL`oHf0L!yWtZ8C-Sy}R zqp_*V_C3FH`fo*rp{)yWE*hvgxjmfS>AjvP|5Q@`Hc^gbH~4&)=qb$7-cbFA=m2r) zsO$qu!$*(`<%fIJR%PCc>g&q&hlTSp4B!T%H9Ci-9Ie*P8Zf(?>&-zS2`p!XLO)7 z6Owr-G8={RG)TssP8DS5Ju*hiAC;Y-xoIwBqH-Vp89h4e{OLf)-|h`#UWFy>-xiJ# zB9M>Ny9&{+OAALuzQ!W^U8%VfUz8Eujv4UuA)}a>WfUXpa>7_V3T#HbH@6KUg&@UI zakv+HqZX&N6;c2fDx1MSdCjcB+Mo`a8pMoG!e53F!WpwpW%~gd0kQpdM&L|_zbtg; zaP8Z})l=;s(}wa!s_3qaQ|}n#gGbAo-0e~GYWbgYfxX>@{z&ATq8I|di?t0I*7~;Q z-4YGvt)u_C=leg2ObeVD~6ZbjMBgkmAz z^mC!qnW2q?&V8z6)bG89rt|vxMH)bh0l##~aXejuhvH6UAEx{GZ_MFOmAejkl+6bi zaukr)06Flfvh>wYm1XZC<*2exE&L2GFXCk%y_^>L)j?_@y8CpXEj-u%FCE<==<6=x zUc*~p+SfDau`wS|@K2kap{*aTp5f+P>%?zLXeNfdaHwzqH|IlY&gntQmK}Hq`IKlV z^}*0aXVkL|8+Q=ph$`DJQMNDsT-m<7JLo>y`krg>o67TV1|R%qu=sTAQP<#o%JaK| zD^IC!wthI$`DXhWwY9Zlq_efX%h|3x-#+$0u<%T9W!KnOgYI*|2hRqVbO)G(N}&eun=JUxQPSb4gJC!j}Ld``PWc~OPXtA)oE+&n-Jorx$LyBqnIe8$~@jK!xZ z=Q(wdF89BSAX4ZObz=#CwQ~T@^OU-@T=o>^mS}lf#=#K5N~e+k6+Oyc7$n`>Zjl!C zfa#yJ2~JbClgKRYCV_#ZnDTy-B*u{U(>=(0S8(MSlJ~R02hV}G!Rqed5(LpYgA;_j z&xX9uL8y?`ZYCZq1X=7Q%P;9(RLCz#D)>BD_)lnIaLFmsz8>VaD_DJoF{8UmJNs4siAZLJv6y)|!0G*~hBTrh9$=Qg8XF}E95KW}a{(2BwC zwT|5=SKlS<{Wnc}za&FjH(Wifo@$MbZ2kBeCw_%I9}5)-d45~Sv$ACqFp!OZ{Y!Fw zuH{W4qrYepsp}$dC!XgKj{|K~8dOvCH8rj-$trNc~qGxq#SLoDUiDI-Kja8K7B%|Kb z>Kj_=@!+C$XVo*P`HawqciKO;*z?m&)aM|IDI{{EAeShd2J4w9NJT&wror2TKD>@Bb&epLn zAqAZ<_7!wJQXm76+ByE69Sea>)YC!xbJ)y%0}t#Dn(d{|g{jS()Gg%^12pP{JPONZ z$YYm~$1@grJlm5zoq=+wOY(IVcJF=HfP2GgA`v@>dbm;&v2IX6mCo`1ATpaq!vZ1C+C1==_&N{#B|dNT zex|tHCcx^!~Zn= zZDW413(=j>=Hc+KeYXWpXZXGFbOWc;l`X#jKeXi;&;7@*fBoxI@3nq7;MAMyA&)lH zqq;oW9Vs4lb_#Yk2KJ=q`a2>IaH%w}*IFWlOW6GVtwV#Zt#>$svz>umDSSfI{Mn3PxHrp+AXP_Tj6a%79ZF}o??A<_z^>sazjJYEY3Zp6ypZlZfK%56%!>IK z?VD(QOd(O+v7fizAS!%7pNZ)4x|sQvg&)ho52casUy(fdb3&e2^wrKE@CmDsh=po* zq~SLW;Y#M$;f??yBBW{F?^s(bS!T4??KHR(;_9DW2s-t%RpF-B@pI{pcDee#NkTJkTaAn}-Zf6o%c4GFfz)RQ(khG3UGU z&ZLTQ`cviZ{aWf7e!&dvZiJJTBARyB0cFYl6UyEC{44dj!t8GUzK)Shk{Fd|qaJ-! zR`INXFtqn&ChS@#e#Mx4JkTn}Wcn&!pbPV@!^oWl2g&Gv*u&?X%J$UfbT1QQ^m79U znj$UVerK!Uy9e_ga0W*|Kosrm2vKWkpxxXT65iq5AYn0+pwCyqd#ZoLbHW?In^}3Q z^Ds@1sM6Ms!NGK{_vH@Sh{Rl`-E0;vv%Zl(1P(7b2#&VnCH)NX8LWK~tVI~*?)?}e z)0wBQb-Vf*1;xUzmeg-6EgK;(ZR%+nBTcb67TGMvz#3bJTtgi)K=pU> zya9b8gykw`h~k}N>kpO)buW5STZVSL1ka}nZttbIN}^MA!=XUCL-|GPNX$<}JN}I5 zFU_ux!!OZ>7=5K8ju|^ML0r{lwjmSV{kHm*?di{PpIGG~h2&vCB6&!CAXxE$ljR{& z#}c*T>7!yR_LH+bb#2<^{(g-!MehDSS@)7j4&+3}A~jKBVr1Ek4XKJ2*`*#@qK>?_ts z1o_zPw%3e29$N3QwC9GH`g}v8fs=Ku{}`_Nw!&AU_O!m2(nEtrNq*_~ zbH?DmDH(p{Wl_WN-fPesL(8=MXV_=7$6Vj0?F}&W=%lHr6xOZjCxg>z2J!IE@vFYf z;~C_Q&EL&$$j~0l;H8V6J~!Y0e(Sp_JxCwTQw{0USJeNyUOxheuj|Zsr*~$2SN1G1gU&nmOJ5xV8Qo!|`(t0YKFK*DpvP}Wa+mmZ6<%JYRW_+#mZyaK;2pC9*L zgHFFLpNaG{OR7h7AnB!rpYR<>KjDSk{0j7AAI;cFH$ONJ-L#HZ$@KG9NkAP4u;y1< zSU;)$m#Kc}=F589-|xNcR^8O~iSI8b%TzL4ZEx>@b-D_blXs2raqBX#GdN;WLG~y9 z&o~2x6WZImday$-L!TfaXkR@3Q6_$jPhMyJr|5Nutmc3FT8)$xanZNM-Wm3W+cF$= zojPoc=XG9ZU0`=gj{juR@lWD~$$>p4`i=335q_Bw>h*cFt7*`?nsJ^;iqo#07I})t z{}mg4WyjU#&?;&HWGcIZUAOr3P zme180^8wEFe~3Yd$GICF~c8-W4E26Bsje=+)p z)(Urn1_Fz`#p`=N?FkrbR0R3zuYOCqlj(Oq^v|N@R(^Z|_QRstkQR&lCe*iUbV)Px zTi3JBUZuxiHa5ly`xkFNM#kYc<@2LnYp`lE%O_PJ?lZ9K@7JvQ+tf{$rZ|-6NndIB zL$I8O-*lm?|2Pj_O~Ahd`Z`r_CF$!Rt{(pJ^Q51~@DJU5#cca~y|&$|o5{yt8e-)5 z>(NGdo8Ae|;1T#lUx!AUYR1Y-ynd2PWvfrw{*G--?&xd9hV<|d1pfi@`9+MMvOzp2 zjcboxzwG+U6d-Tkg*e?LehTf{cq^2W&AbtRoBzr$6sq_*!)8S|5tRux7Y*I62N};GCQzYg1+mU zZNPo}B#-w}|DT8c8-p%%KV9hlyS12Zoc+=J zm-MZ*BLx%ik#az$c-*q52iV49IX@N~BHFPbqOVi&g!(P&qe(J305dV)e|ms@zTdZs ztU?v5-^_1)D%AR63TB`q!0IfVdBdLlWi2WC_&j2BVfGoES26Ys^$?|&x-Jc7{Cv<} z-<5iO9u4(*R8iB3KGh_fCTgPbBEG*U<|X)t_B<`yL;k=BFGWs1?4$dXA=O_GX~gKi zDIX(@`p}-IQ_Pw=`&v_sidy-H=E?ZGDIBK`>*ud0A=)%4usbye@t`DL&M1kT0`A}! z;bZq&#-9b&F=)am>}Snr`ppT9_`1IZ$9{-(?1ykIuxE*VDLvdBcb+40edCP!W+bW) zI!$pj(Xyoe+bF5ZTxSpZWXgj!;%Vij*2r+13QKwDn`TKtH@|0>K>kd5(Cd>rEajnZ zHCc67?+^4Jsjm?~5S>S3oRD{I#?uP+qEG+{#Xaf_7Wlr-7a;G}B?}?%3F^Bhu0Fjc ziuaP$>@6rsTi}evkskaj(LP#plI;`yNA5Q;n2Pp6U+cB1v>bop`DxmF*?$>kO?{1r zX4q8P(to56!Wv$vK1<&9sLvA&{W|iIMV~d;3o&$axEe#ZQ0ou+qSk_6iS-#5{Y(3? zric1$YW;rFI<0EmtG{BJVOm7XI!WHbNB=8kFDLM88{d(b`84)xV~5CHh%AnKQ!1vE zpS~%k)DnGikZ^o80~jWKv{WnTTL8M)UV)x;&_j`vafc->5h2TcqeaSsq$OGWMvU?^ zc+^FeftQanf3(-}8^@m(D}VH{`5%26n{Awt>qVCNoDokF^o%j+DF7V?KTyBmhhF!G zeX85W35&j2>gV~c*&jJZf3!q|yzIqq96xOGVj6;D=V@{*;$rRxNHE_u>HC^N-;JQl z;Ey3MCM~qS-zT#xjgp|HCw(4|x=$U(maC@Ud}y&B5FYpgv;&BC|BU-Yj?jpIB=HJl zuaK>>tRKev9}|uGX7p5_;S(VKk)%f1MD__tANp@^E#|1l{>nA_tExlDlNY}>dE)UI zr-!haAkGHSdLcToZ+dUjv_8rc^{KEw2g6dHbb93CsbPc8%O2V^kD6!o~VW zUulud612qF>lpi#ZxC=T2p|UCNQ7AVtJ7oU&zq)QINDdLq+6uhDC_(qx&5S7dBLEj zeerhKN0Z!4m^eK*%oN=?SrYj;8> z9Ao$4iuXWkr&@FjS0K}6K}AQfhwxM=71v%J!ui5Y$JKi~wfv)@OqX-Nwuy4#fUhxs zbnbQ@F39fMcnSv`v`xo@gK$J&*?z6_rS?eSZJQ3M?cP7pwo2TtoIBih>onq(es`?A@S4 zp?Bk4d*m7(U-1DAI;T{MOR{sL1F%y+JXb9Zt0!=;eQ3&+I3E6rR|yVszCEDyc=2te zof|)n{DtZ7Oh7+2vL8uIzD=HGf8ZLSJBQ0n@$IM4id|?$4t31FQ0ib1g)6!qrt6`o zf0kybuY}USqZS?7I&|wSCyxB^$GOM8j_(u)b{|zskG6i0qHa2Z3%K5~$rH}u;?jFM zCOsv?c@T%5aT>waUwfTz2HH}xU)=al9N0j=1P5qEoxwY>r?_3&UhKqPlMX&}aX{Iw z&`V%X%5C=^QcrmQjrnja0Uwg~qnv-y05OhA&&|-h!_`jO2Ha_|AeUt`wDJG4_b%X3 zo#(x;M;c=Vt1QV7ENlh2*>38jZVHYY8$=1lx?n7U?I11+f}ZT4>{G|7Eu;7n2|K8v zYt8CpyO-VF_IXa5-SX_?o}JU}_VGc4&7P4!1sP;4Kmh@&nc%T4kYW#lVj*O4e((FO zH5Xk7*iL*2&jVW5nOW<5@9+P8zwe%r0HjF>DH&C1w(bs>e3?^_a>__(^^}X@Wm862 zz977u_wSv3uJ3lfU+EcRB4+6u%`T1Yhp@+-ni!pd7qe?(`}^o5W)f}Z5VP@zr`-`a zH%i|??@!xn1NL>tNO>s>`~a*YLVR`7V$0RKr5~ZBAupXmNI^IxCdLpoHk;F74mCfO|fla7sIxcD2yk z-}+{@)7Zt-euq>1#;YUBjE`H|5f07@oO5fsVN>Q1KxDCRf%d>5rZArKD)i?jNI#j? z%F*grL8RotSwIj0*Cg$yCPA5ns6<2jSyR40WNI|lWW6$MrjhTcagP;BJRQ_4Wsz<%TLNrMw z`_nuXr)<<7Zm@@?GORNG&Jm}wOB4(v8Ls&9vrK*;T0Lo)^()^EEt@m~=Z8urNs}FW z;gU(i!fs`7TMvx2BsHGQ!Qj?+!%f5VQubL}m^N+6yEINSFgv6JmBxruOlYob*zYhN zk6wh0baBh|vzf`7zxA=E-NVK8 z@rEOPe>|bIp>;YhhyUtx=x6z{^piNd-#O_i9*+UbROTLTpTro^u=xXNLWp8LQ0~%T!i2S}VAoA4FwEKrnW9P#yNNKw;puQrU+Qu+rFIYJw z$$wRyZcP`9n0oxz9oW~jd(xak!hdjPT=*}h{MRe|M^j@p8mY%-UACHpU45-#z-xs8 z`C?{8fdPYoeKNv5+-+^y%ZY4rg0*~ML^+XVPQc)30%7KWFtb~OnmB_x;H#Bks^#Qn-Qm`m(4||CLUgY*ARpWKk-9M1U&qh z8E>e>ge`7khqa}A2(8Qb$Z%XRvOQpJSuq?KfQ4lwk1=rX23}R>)sZ~r(2BZYBtR>j z(}>w;^e#A!aR-&~-HX|caXB4t+BxLZbO@U_wuk54#pM4e9e%awS(xRT;>Mo3FY!rx z?X`TRy%wtW+iQK^zYaoV*K|SH?D}px+KcOB4KJTuySF~e*N9%;-n8pkr@p=Q%^(W`t6qN2sp-U=GOv(Zy4};q?QUgn zwZ33fLijY%K`-@_Q9?_0uu^5ttpaIm4P zCk>+V&!h5(SUCcfe?e8g?4g~plCt-%xP-b#mn$BVoI~uG_68SZ(x9yLT=pz{GW*=g z{|8d1KQH>kMPRqA9F%caf-E|p6s`w`RJeTmpm#oc!8Z_C9<>|2Zav>nHk@7BO9Qby z6tuw<@we<<^-=Zt&}5wCujlCKqe2o+^0y3cwnskR!=zg+^2};^+I-8Cl*jJ6udr}} zUCwH_F}s}kX5)7Gwc-fMGP+~zQis~5&Zgai#r0hcttWGR8jq(Tk7# z`CoQ?5^1+0AK~~UB7_%*DsnYG$%s!P`>jYSK8bW%k&i`uBJ|YwB;v;>5sgnGSL2iS z9-l-`!wV)p0ZfRb;*-b$E0PhPMEv+9@(GPkA{w7Wy!a&2YDK*GB(j59g_7}!u%W~! zk*o2^2OOU$1195>$V)I_dVCVu%Zc>(L{Fs0C(6vp_$1=TC&IA58u3X)A4!8Fhx^DK)FOd1I<=j8=<`Q42CM>GD4#y8Dth81v;1OQpr<|QN9l`-(6UBj2eUv}5s z$b`I<2p9PX3>ol5!<&5uZ<+vi8yA5|uSd$nUoM^hQ~X6{L-O)}aKH|7M^^J>X0ewggmBjt7EzL}x8 znlv9X6w5C&j12$MN!gWg;D%^`!VNo^Zx;FJ6&w%zMR2^%@E@6c94K4<>WZu|{0uNIhZ6D^b5T^UxJRo%U zagQnq51&b+%Do;!!|%t!tLL13xaBNqV8hkzn7%){;aR3kf*9eFxm@XlpJmJ2mCQY- zR4JJYzl*7y3!g*C^>am=&K(JFG$iU``KCtb=09JG-{spLIGbIS*ndhPR!B@PgTD`) zqc}lM_Dh;jPV)DGLDZ+5>~*X78BX%|fuZcGxSVAFkk$O?umHDKvn=>AqS(H?PNy>n zJQSXHU7!VdFRtmS`*N*w|KwWdan?OT6@8T%@3B{3h48S!SD7VCY*=<*OaR%mkCzrs*Vh$d>lPL;W27Lvg#os~3}fX~wzvKiV6sE-N?GGNm7yFh3_YQRq6+N^0s+?o~-zd0QkYHG=wa};^urYeMDx?6=z zEN7q?z2yuWqqm$vWb{}vT1IdAWKj89XHBkK)yWYrfcbxNO5pJRw-F@hmMd&8ASwuZ z^HEMrHYY&Zc`-SWV@?rCG*;HBFmhJ@sRq11xzzdc|=}u{dQ-M zwebd@gja;#`2N;Bpbj!L4QOLRfn)(Z z#ia6g%|LcdznoO~SWdzh3U{2fFbn*&7F7#B zt(`=`z(#OXHbyBIWtVnj*8|cditD=@wx7JtCuR3IK-`2N&8Yam_n$uk@lTZL>pw2> zPt=cpqF3V|%>_=w&BPWrk%=pJMzM1ilr}8r6 zA352>$5Zi7l+{VR_(#a_v59|(XD9Ag=nMyM(7eu!O~=83zUy>`r`_XJ^=!KZpZD_v zgzindV&uI&_~(H0iieN*{WRUCKf~*%NyC4{UvABsGo<)Wt+Qj(A=+wcog1y@POF(; zBf`|UeRme6wX|jYlY#`}B_;F5Cd2&pnz8kkx69X5UkVSp_Y!!}4DcXwEG08W!uQdC z(7UM(NT^8iJ78CukXkshiD2Kv4 z$X#vwgnsusk^irBj%j(fuZz#YO)hYDBV;0T!4z4rq-b5izLmQq_2WP91;72 z3_g|zzm~@6z!(axSuvFG6b-~pX&f!QHM@4KYhDNr%6}GgVLom zK59mOf77t?^r$|a8=gfP!m?$T2aX**mCYP3^!fR5rYi#AUr8hZNv z=2DzOo^ULuB=aw+e3qscQ-dK8(&15X2U_4KFu^sNlwUGQ-e65o_yq=9qYMPmX3B|v z$?2bxTPYLo4c|#du`}{4$6hzZvrc1o>xm%DH2b2nE3ICZB$p&63-1nG1T-dfN7g=_ zzXAsXuQct-nX_B;MgOKYw~_1+rM-zwZ3<;b4zg4C0hUN3wd+3UQmay`Y?2VFU6DFX z3YG=a7z~y*TvwKrcGhI;;YIyyi(yc}+Z=iXipiB8w>Fmf38*WCn-(P3k5~L|Ri32U zE{!+sOv9UaCc&FJ(($I525(w6b8r(W@QRs3LZyTF>aFjX%Hz zh>Qn5$slxQS9R?_rQ-*@RW{^}Ul-jaGFTF-aoTYAcwm*$gFa%F#HIkr3dsY~9~7_q zvQko(8TRQI^a%&YD>XCGsXZsF`~e@&5Rmcf$YgrIWg>mN>vdJl@gORvI}@ZjolBb6 zYF;r}MszJp9Vo!Fc9QJy@@rKDNUW~)b!ZVr@|^X9+sV8ekZKp5D%TnSr1RmISb0X8 zh#F}*=nCgrq~=rh2?mfncx6X8cQ$<`^ikAg;#KoR1)&9kn(R@zTc}JjzC6e9zAWw~Edjit+~zUA zo=xFbp7iKhsa`hsdeWn3wYp!6BtZP-o9UG5)UI_O6-OGGJ}b51Qoc4b1lT(crk4#U)~Y)>{Fd&}h|{k-XxD`9AffwZ=XycNXleo>qp4}@$*Dd;CqT&H zgmkmy!InvSYCqFsc`18TXzY=IWXVS2Zl|Wb^|c`FSPa1w8Jx0QA&Mv}*xINj*jWiC zs$c0PDqr0<(ei2)raOsEhwx^muKX)N8}X|L|$XQyduL!UX28E$w+XHFTswEQik^ z(KsOY@&WJ47^Hi-svtfy2JT*d&ijnPycPK5r+BvIYW(?3Okh*abR!xZSJt?}ZELCdXcP)m3`|i-2}})Po1u?a>{WHKse*nz-%= znyx#7r|XU&>aufVc1;?J_uo(M_Zj0#P&}U>G@koN#jjDMK;qZv$18q~rp2$(tMTjQ z#jiqZjbEeb@vEGb_?2N)m6>27f{$JN8cmB|d65Ji)lolwjb4pke_8QsG%bFOdhshs z-DZtneFoF`Rk%*$SO2WqdO0gb-9Pz>jbEdg@oUtJUuFFK_*KTwi(eIbVZ6kHkG7=8 zuLf*vR$C}nOvUBZ`1K;5OH9H;K`r#j4t*Q>!hVx}d}ymfmD zqSUs$&Tzw@56kMiRXt9pbl70CC4>98DQ8s8F+>k z*kdS2V7jY@oujQotd>1h-sWf#z+6)+Oi?w5AV0C%-TC{^|4vY#Rl&0nYv_v?RZ%SnM|0-7OSflqU~7 z7@pV4TzKvrDC<5&R2esoT8Am#Z`$!J<7F~mvyVBiWQ>P2!{pKo%~pT$fAZ%}(KjME*f*^G+sk>jy7|7xWg!CVvN5owa$OsHwC! z$F1*W>Kw%}sMha+N8AbF$-D_6d;j@T&n+o=&wVb3OsY-9PAlO`+Mn^75yrQs}XH zZ;{7Q0FyC?h1-h)tyAl{u#cCI4}zB`r1Oe2aaVX6U_boxX@~KGKnXtDiqh39;-;d<@sLW?K3&TtMNVg#Qmb8x;ZNao=4#D*E%&c?1b;Mz^}aiG`g+soFuI?W`wsBJ;aB>R) zSpHG@7(W5?@xbz7;YxzGsg(67U-r_PLc+F~Hm}kcZ>fUct(`+X=qoznm=a{;-3FR) z7GI9qny{Y=ew6-?_@(+kIu+yY2shl3c;~27g;!gZ>yS$Q3)BC>2&|r!a80iV8(KX2 z-DR_eF}LAmG=@}l`|TZc2%eMyf6gp!kGg*_;oe7!NT*J)9XOhQ+S18Oi06 z;ad^fy+ug2j5MEoY*3k8s%Z3I@elP)d62p9?N$u1vFqWMS<*`QQaE@M*kH0=LJCFz-0zghflJ$|Z+Vse z^&JJw2n-$z(AMuT0tsi4w6!{m*pE4j7?~btQ65^sSvk$=7Tx*uH0L~>UxDNKt=8uA z(2bIo9&?F@e5LhbQQ%1aZfo-^MbfcHb%=h7C(pbTV}fF5P`;4YQEH#h->FIp^`(O1 zPIjw<&T+nwP9XWlOL(5@xZHsY)QZ<>RwX z_2tXVD1GJiAGVL_KTM~h-+;(-^w5CV`)~^&bUJMFuC^b#CG&gTiuwIQ$cp)NP{r9u z!xS4MMDvXh&F^)pI>UddG^N(WU^40WoU;oRj!~qF!o8>0y|3TdEn`*Mk^hdhc{igE zRvXj)Uo-TleX5A^l7R>Rdn)0K@GVRbnZL{0EWQ(i-zyiNI_q8OHCH^#$!G2x)bA4l zD4EmLTBo~c*rQHjDmWChX)5hx9B|J%@N~rFH?~W?P+M|_-=u#r=K|AD!hrWr6JESO zPsH(l7%=YKugrLV(8;EvLy=nSbWg*+ljnWhWxV2*iMpqJ{qM_XMaKM-H;X;GHWR9S zwe^i_=>Ze(^&d0sQ6WahEvIw0%PpUVkLQ-7#Cs;RQ(1^A^lHIQ35ZwK(fZmXr-ll= zaPThL8O7a6)l&#K8$?+B=M5wRN1Aruf*+^$sw&~+i_h~Q=v3T!5Y#H>JSb?E^I#s; z63&CuFyzjI1;~iAs?gZ6Ckj=;23{3AHh|*n6t#E+aduY}sP;r1?-SiA-GK{MJ0Z_hyeduMak2sC%u7f*2aiojmvZJ)26pfjem+i zJbT%d^51R_po4raG5%X?jM+!2x|6Xlnxyxp2jm)yy2)7*d zczwIOyjP7d(W+>3vBHA5>WADV{i8ld zMUBxL?e1d<&w-BT?=YMc2P_pU{n%MmIn?;&qni^+ z3(MduRVJp=H@kTcdZQgTs28Ip5j?XMA9X9YhYO{xmzgUi{u4ZRK24*}6NRvk^F)F8 z4^K=JE_;GNpvQS4SD5h$-1=_kiJ(jq(2-q5>t&27K6ae^-yVaEb)`@oTQjZtCHdp_ z4E@3U;i*W_n}f!Wf8(M-9O#!3|Ms|+CHco>1k8LiM8Lfo0mle~Bm(ArWhNRE|Hkw< zkQV6Fpzmp|0!M?N5 z3ySY@*UGPmPe#|Yh-f!nRRT_dVT5ypVTe`+BuFNhY1)~CMwLl!WU|{HkwvV{-nxxf z$T=DH-B%V5_lrIq6Ax3uOdL!!C}Ht3*ybLxDsfg++ru-$J7v!q*GK9AWA4g9JQMG| z181g^K}x;%OP*RvN!w3}-1HrHw;cJM8XX?O8P%LB0LIiR0{u&tfH^lmW zpnTLnes+cAUV5D1XIIkfz0XfSFFtM|c9hDoZiy9s6MsaWQs=g6gx2oTT+t>mcWI7n zYB>kH}`u@px&cBW8NgMue=Jf_1TNtzK8K;K35%-4()Kc^|S zolwUpHnODzw0MQ;^YRQb7us(3@^$=~wpEXV7EzzCCbNEaC|osoJ$06Al10gG?9ESDoAK%!`}ra=WodGLUUOyj2|gi7 zAY}ME!^ww9OvS(CX*5umq)7+wYP@m+b!y9}(d;1g!gKc4-DB+Ez0(Za-kS%>dGvc> zS5g1>dhB~|(2i;sfnWXvGlJH*-g$rbhFGqB$1d*PH&JGLYkjm ziz)j)EN%VZkVrco+GAoM+$DwZGD(aj1+wjOmrRpwx4R@ywmt3=&w4KLtmhPWLr@$t z-+D>}@6AZW+Ys=zo|r^{CK3Eh6Tv6-lTH{T$+kuluLQaS`JO=NK7yGH5Jn@FMvA_ z3tt@-zB&wFrJ{P(dzlwgalI_YFA=*98gu56i_1 z1paZ4C#M)qDsDT|_~Z{6w_SZtqqZc%KQ7CepkkVK-hwY&T$2j#;mw*3HSF!y#=rA4 z$z>UI6TbQSL;0r;Zs<(KD-*@@T@%Lh9ZaoBfZFDV^;WxRf^OpWUfI#$UUoFRmmLl8 zWk*AN+0h{15AF5iEPi$}3w~95;l=lqY`2*B9+8riUv_DWAK|z75k4HDfX>($zl|85 z9~0V45ao~gtRLrBwYhbPq#B7!hTt>~hyap8={j*h1ksRKzg=Vf%6`2dy2r#4{U*_r z7V5XTkBROvE=Xc3?9Z1rm9}ZHPsCD5u-}pj_S5`h8rJF_^c;*rBR5M6JO=~$5cye( zyolV010r%H4v5GP4oE8-E4!who)t0x#Z_Gm|MTSE_zG#f&YcOf0KR?q`RR6DP;-@f z6#jgRw5$?-C!1D1L^vq^+%;GbX)*jByPn@pNAe%TGOQ|jooQ7CaOr8<*@6IQ5+FXC zzL7lV!20X2afZlsfbbDdNi0UHIX4i14SLDvpB6kTsCZUYg5{*MSZR^PmGiD+%NMMa zwfNAI)h)X0SIlXz+b$14vUO2`v*WUt{2TrLh2Hz)g{{eBAuHwE)>AVBIPcQ6D?h6) zSPBwXNU7IAO7ZZrYo6sPD+<8F3&6wsomayvTlAH`ci{2suj%`O!S8sB{n#CDT{LXg zkX*TkuWsj!UeX1;`ki*zK?g+b)jM@JFbWoN3rU~h;?kcxUoCZV=?-V1S@dS~`;JF% z=GVlwXCk_(mQ$to|L4*B(LCuu-(~1MiMLr2-1aQjK2Ot5Pt$JNOCdVJz9IUbo~VQ9 z??7OgQ!LZJAm8cJpJ_=w`sXP9>xKS&dH#~13>Cjp#Q$%~K^#u_DdTp6wZ|E{4r@i6 zvoK%vPOh|Z1%kmNyK?A;f=B-9z41t@UvUEd_>Ay}K;Y^8ad5EpL^g~qkYkcRfEZMtgZwp&!bG9UD9;*3`IpCFlm{}#hc{xTK;f6)myfL!rjeIF!7IkB6$g0BF7xs~ z<;q^Jbfnmc)ItV3k$)q;xsefF${^<7XqakHnCi{G|Du8a1nutQGL`V>rSu2=K*CRc zN08^&kP|#X<8lA@4_H6=l(;oW?*nEvQNBl0ZcgcnI=}lw!6GOraEGt0l;Lo%CU9G(O4OMCh!>fNKY;4%|hCjUinv+rqm1f^~MUP(} zm9P0ve2b380PmbI{CdcY#%ZoFfGhWLMb)1f;66UJ5>~Hf;8y+{*JuW=K4z||82A$K zI@e-cBORQ`;PVXmf!}Y1uHS^5`D=y3>71Vs&i}X6`fpdp{G#v1@IUsW%!}f8PZY&> zKDQo5u5%%CIew!{t14-Wr}c?{obBc5tgk?M5CnZflG`yknLm zR4)?2m<4o^h#&viBS^%6c%afBiJ=vF(0+aps-DsEa3t`K#Pib6U(fjF^IQ4f7I~0g z&X;G%*Qb%^%9kgsmIquYJ0c#tpu%pb(85*nY0BqNHg7R+pfV!leT5rdO3FaqLwsp9 zno9-YFxL*4YiIaeHNUE)f0fT2=NfWVjo{_s2jtcHvi0v=d4BRlk1DaJXbnudwz|*b#y&ouTk^|MKwl z*9=(sRoy3FQR&N+KVmic#uf7A&#;%@$exb(em>lYJgqux%;p{hl1rW3SSt4jK}At` z1XZ23g6Gl?A2gp6eRh;narp@ubs;3$OujSDwG*5YdaV!{mTPD{xhAwa#VHhF-U^Z7 zBm+P|t_?Kp7GzzD?Bd}d>}vG+oP%{=yg|I-agmU;@$>0DZybO4W@FDX5YtY=rPdSI;`N9UvfQ7tNbvsApvLg&5DGRhfQUi!F+#@&e!Lc{=!+D(F zD>v|q88>vAYaMcpN6NU?ZLYm6*LdcPYZ7yianvu?N8`;hZs_G$1dbRYPxQYkCX~{u zeb$PLJoRq=p;2DR3>kuo8A7GiGkDv)Wiy0!RkHi7843QbpK+GI z4Kt9+yl((B@ev}FzZOoLjVqJ)XJ7xO(J7rLKMNBl^Ywg7rMT7Yd~SjK$^-mJepL^r zyn)KA>SQEQ8-@eq8PbVSns)1|9T15d`7+fl3wS>L8l3jjHz+xK@tnBWEkDbvn7cTr ziKX8vpBH7bfLGL8#9QM>MA^tSQ8o*BalIy{iff{5^svrjuB87rUOaah@jJkd7r%#t|5Xyk*I6u_{OxwL z^mjMTg%`m~Kx2Zr@7=Ht9ppvu&s`#ZueCO`3xJz&B!+*<`|3{iMfGEgR*Aqfs(X^5 z{6D{!FfGI1^X1DQ4~+E{#q%^jNQr2V#Pb9x;bjE#WW9*#!wXul{?_+{ih7^gi+c>|xF?i?bwbQhp3MYmqe|8wwt8Z*+F z!{D-+`2INdEMq;5g*nc^fOUH!9F*D|KflxN@yE)%aPW-qN4EQ2Qpt?LZjVu(rsfmxAl!6<##$he>(7W809!_Wtx2z5XF!8$pxgx`yRhg(~-??i=^U%B7*L96jWIZ z(YKG1LEwx;2I9pWwN{{ms&~qm>(ihu^x_e7QFv=F*nctgo9%Vq*Z6ikV0#?h?T_Gi z{{0%NMEX-HqMw@rfH=ZZ-BNW-?1aUJt0<2G^)CSR7tVTCQGekqea{14I^h3+zgA`1 z4|!K9YFIw#mJORhNqcFrlJe4=I*>6UM;Q?=B6!sYwTG4w@#(-|!_*rND!<5lXSX;< zNw!kNMl}v~CY5m(3YPi+f~DBW@A`P>1bPYsHI@}q@{uW@_|rXJ;SpI=YK~atWujVo zDWoq;`d6ZNp3XI#=sr!lp22&?olEV1H9#i^2c0u|@_0mw1xN&Zo=Kp3eQ-Liwe|h8 zFNTA%(g}VOHt>gE|9u$tP=-E%m>suX5rus>yN5vx zo(!_{itOaDvs-r1`Ec+C^Q3QcfN5IU3pH?rgn9p!Q!gprz%%>TPnzpON*o>n>iN!I zcL@L{_ndT&P|@Oj(J6DIko6~=I;L;ze@maaC=UC-XO<_%DKvBvYmnr5t+wlmjlf$U|qU3Lkl(c(5CJNFWbn zpGTvAFpflyMMjkTo)hVb?tfU7Wtyp%jkDz zUbHq;_Vec$|KCW{hcf@#EJp;5Qd1Q>YG4JWUqMA|!pL7wcB$4Il=f0@aI-Ie<3+Os zIGtA_e_s>&T}IV`M6#N&`@ck%@KWmXwB&#h+MzWE?CjB^19lE*)d4$4DLWA0k=-|y z6a&e^gI*KSg2QOxK}@`5|*%1oJT0kNGOfzkb177k)a<^|(7%3ltbB zViA3UVRMIY)SH|-m+|u>=AyW=?`Wc=Qh2{zU>q1Yi`}F*oyU;whfBju^UE&f^&*yyq(7!GO<@1K1JEUoX zRg##5aNcPBL9AhIz;UuRyv6?koiA>IvmadW{%Ou>*?=AjiYQG7Qnn;*2ZGMu4>~Vp zO*&7UtfWMjR;;1r^&u9V(@R7^Gd^6 zPh*I+N6{E-|F-Oib`gE^q-Yn>H&2RoQI7!al2<7-Q@5Z%-cEx^u?6ZN5Gaa+z}s_8 zP>kDfEN!P1{q3XAMAI85fkvO0C zBJsRZLh9-SjtpIc6sj0srWLP>)ABf)M@|OkWDq#tp7B7*S88gxrMR?99GRs)?~dn- zPVCE|@sjbnukTi;J&KE$;G|TNc+FCBw_D5^(3OdmgHQ7mA)EN0*OAFj+IB zcvE*OJ|#Io=H@eZxMdVc@w@2}E#D+Q><)Q>cDcDNc{2rpm$=!xZ=YM{sr*sD3{sXy z_lf_@M%QNiGCzxBmsh$qd6QANqi-5QfDX!yFY*&DzT3vbCdH|PJKjvo117k;rd_8~ zZ*gRhYPdVUkcx5-f3+iYKjfLO+B)mCi7IYrCKsBTUO)hl`ZRV^~;tOxDssXF7X;b zimSRCUO0KZF9Q?I+P68=A6#w90mkq@#c#l{qPETYTPWzJp{$1aMmvY@7L_?IC;VvE z?2GnbpOuUULi0A1+uimBYfHPeWv5IQW0x=yYsvhJb2{rzi~}iG5NNz4fktVr%wAk_ zYtWf?>&5*|ZMphnzC7yltSkrzZZzR-k(?$DyUry7mk#0llS{o{QeI8{W~Z6eH{6~L%{rFWmX0K!%_VxDOID)p zgL>XY@Y|;V+$h9hY(*gQ1i@Rsn6aHa94eVS5?Vd^BF{NBb9|e2kJvBUupcA5Hd|)C zvdgZsw)_N^lu1zRvPt%uYwaaEw)?JpY{#=#sqvNdD`!gmC<{(9#=(ZKUwVvh7KcA6 z|DlR)jQ6$=Z@kT{Dy1aV2QAxAN6WbPhS!IHJ-l)M2IIcFFYh^$S8ih>be#b@irKjze`(`5#*>>eyY_jaiw?p4TI&z=3WiFH; z_l0WS;?_{(+j4iW{d%Y}VIv<1Oot~h!`7Di(q1xl-V?}wIQJUbc$!+Ftt@Auu>rJ=hu3Fa3^y!HgjQ!=3{_-}*p;V4-^xP7vfi~z z2kb}A^nC^q!~Z7lNCG+Z?ei!yyYh^^->#IQp{&6^X>B=XZ6RgQE35iiTb837$}ZY# zA$<*9g%Ek|6m|z>`4W5Wukq%*>XE=1ITGV)uf5(bpKP!Al)W^EG|c0Fp>I827&IZZ zYm@lP`0@zNgVvw?)0NTu_eRO5q5n2Rf21{c+sAzqxK~Vm*KUmW-R#ky1Vm40gVMhyZkP7k?KWL)J$571oQ@lA zZ2^~wg$ox14kFDdHYkGN%$d<2F8q#>^R+XrEig{6oRC}XwV$!JRPrtK+SbSA>|SRd zrM7yh5N|A8I74{lW*o3^VS()41lxoQZ<5^^xM|_SnX+4eDq&4l{oIW_2zBAQKOOBu zf1>Vxn(t@UechiHLc*6$waag?SLEAk^XLJ#nv(OicV0=AN|OI{ycfuN#=gCcslM^2 zo>`C=$_p(D*pgeo??8~VluM0vx7rrne5s?&D8 ze%0H2S?H0zP*p$Qgt86QpRwytVd3Af5#~|^_+?1xd5|dd%AZ+Vc7^Isd1n%wc`Ir9 z=cCgIUbgJ^uAHZ8n zjQ+gd(;An_!=L$iJiIWCo}pkw`8Q(tHv<1g;NJ-R8+jl6`x*?G$-i;Vr19_T9H#N_ z8yu$bFGNV^U)qG{pZs9?w?dr|^s`sZ|6)^1uVw$MH`0`M*KZB4o(>QHWoM{j`o$2F z>)WNBY_QL9Hp6x)ihKG{Xxa1&HZ`oT+NIrnzft=fRa~SWLS@Ro>$3Kg)b2T*+o43OW3B=CIJKF+IFRzwIH~O!crxJFpgHmzo!x8CuuJ zNZLz3Lt58fT8MdaPTNawvRBNozgbY+xYcTU%FhVAczKqjLIdv!<5 z#GWj|M>*`7lttI#qJJ7Wjwt~wQ}deg2l*5|blrVKS)HDFhr2vwc2t9~j$ z#GCdhn_FM88{e?kA)osQC_Dp#t69l^-`bqwkpI4U!E{yf-_L&ZbNE)M>ZjabANIZg zUBJ6mok)EMT~L__)uR@6*=M}F#Oj?6)uTLoLzY1DPZ!fhyYY-q)$#H?<2b0sawYwP zc}Bmgy=rS}#TQ#7l=Sik?Vi1gVUtq!>LGM{<<{tUDdoSV+dpIu`&aMD+yiu~qOPR#A(X`c5;iiJq3W#A!tBsu z{JFP6PhV>{{w(wdlk7+OLtnqnUe_1Rk%)2~A=PQ|=S1KRi(m0_sPd4FEw4Fgm!9gY zP3AMm2V7@Y_OY2{SN5|(nt#SdzrA7`avlqPV_Ozy0-@VU8{~MQDpL2Fx{Ys#FbwNn zv)8>DS{Jw1^@i3VO(#R^Uboks3N`kH*7e)#PK4I|%wG4?(7Lzmb$FVu+cj^H{^9mV zV14mGUiJdgK@Rb0{9yJxhlrsct`2dC82Yg-@qWEX(3!N*HxVjD4%_XWY4I=aEpq68 z3RfvTA~qrL`M`CNd!)mC@cu4ZAC6 zj_8?U&M;37lMdWRm64vB%c<=SMp#b8^wb=JcvgA+5m&Z4m0MFEzZ-u-i!3IS8(eyq zPW3TGcE7Cax8=z0@5;PPr2_ZK(VZ@H>y^If9WhZGJ~h7{kZX6irL^fvNuC_dc1!uC zY}uU^&V7gl3-nojC!G5oCd$_RFG^uT?gH}hdidM=GaR<-Ap*_saM-4Yza`;f?$@#_ zTlDY?R5IvSZP&xkyOlrEH{Pm;w}l=#Cce^&-xLb2_?%F1#cv1&SKMls{|9^RXPu+Y z8GG%o+kbdVapUt=(>c&}&0cK2JRM|Efb{;YT*I&LJ^vqRw<5j;{BZLBkyb16(aHa( zkH<$N{~y_DMLv%C|H!{vkyQRa(vjq|k6iv=MmUxKkNm`nd>r%tzufWufb#zl^8b;H z{D0(v75UZ7{|fkwK@CKaKcl6NpOwG~y>{KB4*lNQ)Io=Kmum z{~sa$A0huAN#_3}sr-K=mH&^V^8b;v{C|Y#J90Ju|DN*y>HPZ|44BEkan7Xi@9P|< z@$VZPrtvRCNax>AWd2{2HzSad|Bsmbf5hbf;bY1FN0Ryf$e8>;96c)k9~qPXkBrIx zM@;@day9>dv9qb|YW{!R{C{L00Yx(ZA0hvrv^J*@PyYMnrH@1Y``M3v4mJNDNzeaB zO#VOlA#{Ps|3}jE|A@Wh|C5I7S0MjC%8F_JKVtI#YSVhKXPWI$zSx)N)eBh7g&Qayc4!mZE5@?cDVZc8M-x)(USeuT!|NAPjGZ-H>#oik;WztcWY(imCTcYoQ60=& znaw+;8=%%%GO5;C6V!eH>5jaj2lDH^yywy78&dVwj8U+`KZ_fLiK+3|oL<+u3)6M?a8yZ@k(m zo)#iX{dBFfd`fs)VE-w0a{ZP8_9rutR7NKrXIc-Q`!f4XO=YyfD@Q$VTD@Yg@Y`1v zh63lNy{r>ZpRk%Mo*uHA&q>J|%r|#9 zuy=o7t+RUWh&BiG*S)NdI$pQ*I8_tgqo(TPM?J6dBfS@cPp(KC+k0ee8Aq!8WPsto zo!TNG^~>J)4m+LB9;)hSl4Ta%(GxopD&Q0NYdAd^&o_Am1xVbu=PXrE|{b^9}2H;sFBv1MVK7jgp&7WrI z<1Veg`kS;`aw$lofX!;I%d(mmqL>#?LRr?jlch|i`6aaU^yjSRlBe^erDZoupd^^e zo(kt)M(k;p>|$b))lahqM_jg9vbGhSX3aqDy#eN!=n>VKI~Pbiuy6lcwa)svtiuxb z#Vp8JNtum^+@x^H+#FVhW4Qja9_C^T0O@LEkfn06&W!oWG> z$T~yVG^=?w#f9=#Rx@)tH{Ul>>y*zlLb{?*ngwbd%D!bD*BwCk(pJC;diMI+Os{p8 zLi;CfsC8CQ3>16(PgQ!yn;Cw>0T}hX8RIdg9u^*;9_SyhhzEW{ej(ZKqw-v`@Ro5{ zVw=Yj+dP)o_Cc`3f7TJXB9_Q_UVl8)$fn^5?OIRc&j+&r7Viiz%NYqb*e$R{4h*tB zhiRB0+xna#C=8qAz$S60QyC@EcWbJChN_q5MFU)<2Z>2>kRd(*yEq3aJCkD4JJA;8 z$GZdjTHnfImX79?aLOX8(Yhc$Es`iw(?SRD@Sv!d122z%ct1^+nAKnT!WgiM>aAeHQ;o^jAUC zZk7yHiU8HHP7or@lsz)hzgU0N9aG9wJPn09WQ!7n$Q5Wd5pNo&C_Tkmv1FW4UctG( zi;%@!{OC7k>=#{EF*hiyN{}P>T!~2##Mg1+?LZ>W#hp7Dm6u!0yKMa0dn*59@cxLA zNzEUt4Tyw7UQJZxcPcU zT~wjf{5V$jeof6Z->-cJ&0ixo+kxKuq8Xub6nLi@o$@cRqLJ2D!eO^TCo`VqEK|z^ zwNla)*dad9id*?9HlIb4QuK@zteDBVTx<%FyaBd1p$u>*ERy z42jRaFI?I1x(VdC z*Bmb(d}AR}b1*+V?Q6_vVh-kE>v)s7Na@`O7Mm}#{-{`oI~`e+jGa3~+luv=rJV(T z=o^YF>MR)7o_qY07XQ7V_TsnGYMozDd+{QEt!FP7Yq1xoxw;%w7MsbaH#WJ-S#?uj ztXdcPV+Rr#kT2FgC-wtphvhO*qj6NCtdAplu3Jgb4p~L#iAmvWOP-#>LM5_g+M?~U z#UO2!t+7uf7#E2VN-!=GoT}T*ckp|#ZChZMILdd~{$! zMs#D!z>uJ(^-8Xw+$~pNaS~*4)&$7GSt^O~yE>ejb{1=wmuId- zB!!v1;p8}+fi%);W(%d=~EVjT)1h&UjiSTG(9N5K&LiCH`!mna67-@pn&OtF9> zN4FuUY(D4gaAbQc6lR0HTZ-dFr_RM+ggm9&H)IO?Ht&O!Dd|og8&52_d=cB`iP$zz z#4v^`Vi-el0ZTB3Dq%zn;Pv1< zFZR-@+KS11R;;4P7$%bjXSTAeifm=tP}!cN1xB_kwv0F|3k(p~iU~!HAqME8c;7s) zf4YTAcA^#JYddi@V-0&t2uwDBD2M68StPskMNx=?uA>|~#GKZne81yX@k#MjG*N<{ zMV^0zIzC6uJ{#gG%xN{k*1-{OA^Q0tUg1TUe1q61q9QL;X@K?9f~2RB7CDrjHg0}W zY;BMpw>ES99gTiCZZXH}#n^JY7tquhON}d_uiCE09-(?vUxm4OCW-D{`fYiH+$`Py z77K{WBS=L*m;OLn_@rBbT7M4z6TeSqfPYx4zCO-`x%v$pX1A33d|C*&`Rm#>KwpD7 z{CzFsf5CVKYqV9M+Z?RcdjB4CP)(?z$I{clx2%*dLFp^#HOI?Q@cK>t<`_SMU!;8? zVUBSmq?N+7N$~jxP(^I;AQT7diXcD|1fsw}i1>D7Jh%I}5Z^p#ME} z3Z&u(pP#WwUcav2A2=ai5FH;ch<*roLG+S%LG;7J3v`Ue;0386`f%}r=!AFyPx#To z3!(-uh)#?bL?GLG*I*g6Q~oLG%2t!FY&H4HR+Fz$Nuz%<@Peq|1yR8ZqDj0U>fr@! zsdETyYHJz^HvF!RN%!oFqdw30{P-6!K81qk@H`I`0KrZk+0+)k)65K7-%m>V$p;BE zn2TM9sXGJz&HY-fd!0N{r%v-F-4@~8n*=Fa5(MD#%4wD`kdt&E2WcO04nDs7%In-U zKknmC`n-=SKc%KT1`1uCCFGm3>1AOo3T32ywghzGRHjF@X(ks7YW(JNQ6hVT(iQ@Vm)`A58Z~CTR zq;N%ZgJ#H+j!&k3cB&|Ld2rIEL(&1*{9urs!&dXEtWC$Q=KM{Ev|Q_7v~-e2gn%|8 zFj{A<=H0B&U^O3Cea=wQdBKTVx8W)Juo_S4{_3Y-)|wOKot|Q-YU0k`S~vH*!ptOF zwdT}0QtM2cQ%gapatdn(1P*B%!W>4S>V%ve@G7F_$oQO6t(Yt>T{dS@c-fpB+8$UY zM~a^5U68Tb_^>}#S5}km*CYD+XP)qr>L28J*5Ia>B@@HmknAB76|;0AcC>G;*UU#WF2C?lQHs^`X2PGc-EwBL;8GeZpQ zAsyIfhS}{myYS~%r_?$_GFC%yZLM>d`TgNUmrt$RQ)!4kO9&ns@X%b2aQW+8=W`X<3~^HwXn{W zW&Z&MVxslh!WBmA;hRw|qZ}!PbjMQqn_@|)kpvd&o5jT^2tETR)ViNiUc!e$d`-2G zp1u#ptUP6QVN4eAl$!-JE1O9tgMO$(Kh*B`VimGtG&749qB=|aH?^TzV!)aQBl%xAMXaSN@ zyLsAEVM>w8P}a}YpvcP7EMe>-obM4eQyja-gmai8ZPxaX4uy@M_btQ~_8L5kX3wmT zPuhpGN&9dvX&=;PFv6>`8K|*k7!34u#jKG{FNfz{<21fVs|KsCTK2snolM7Hf-Rvr zMGBs2_&`K=YAfGMV%C}uXu}3rym;s7^r3*3o(lISH6B=+gH#Y^*T?q1rKhXUVSRVh zy48bhNvc;Pur&~ zNm1>+LS{&NukZk(b}#%?+*BGr%ZjEb_u`tZSTnl&Dz_t%vQoN;-8ohh^)Y_ru;! z>|jy{VpdcuVs2pa7L0{ju>{4JqvVh76k1cLXK#E_;{i*J-ZtqX#8xujofr~#DRNkO zf-Q1biMTEm!-*WOrDI4W-4MUP4?kyxf0bi%O|{fh{V9!6sqBHqI7;Knw|_&%z7E_0LP!F#U1T8_HX?&>dhkeb(10 zn=j9lug+NCvcii;GmJO&%;i&jo1H5=Xm(@HA)YbkkZI{8vEOUe`z=@Rm)wBb@|9}K zx2qwiLK}6@Uoq#brogM|4xWwS1gsrj&n5B7bSHsncPpMCW~e+WJGty&yepnS(^O*D zE5xo>w#g29rm|gj&@+`CvIB`INp^Fe@Vw?8(?mTDyI$Glo%8!A?_z{YJ3NKd;U!+~ z5{=$2C)@dMoB^-d@-ET%ZQl79lINcni?B=2BZdA+F&DmT(C@hhcR~2lqxy50N&n}j zgje5{*R(6IxCZw!K_NX7$FE{zi6ZeUv^kVV!6kUZr}g&BqqPAt)9r_^pEUn7DL$*odk!xcPvfZq&f^-2y}% z)j8p1X;SJ4j7aw2F`SdCEt))_Bfzxxufj2@d9~JAg(Fh)Pi)~9d>>~Otb{M*tb)&K zXzp1BAF}egvkE?y_WxCIe121D7lANcW!=S>xs6d5ql_OCk1NUJ4NzotHB0yY+w3 zw2OA6gW~g$2l%UG7Fyehj`-eA+}9!KNxmP|u~jvUmn*(OibVp(a?cf7E={bepnj-E ztIh8~pr4h_+WS-){H;-J<|mxxwEFex1Ekal58vWnzMB>)yH}pjsdem!SO%ptk+j%Eh4=mRlegWG}JG6gzn>Gb$m(r5Y;mV-AeTVB-9?BWQ z(+cNW&SCwo&x)f}^}PS#Thw>jZagLYGiGO?iOf!6CZs6CS9?BfPKq*#1^=G!mDulxY{fwTEnBhP zs9Mdd5O-=`ia^D)9NWz-bEf!eksFs#rUOsD4A9r55E-6IuU*uy^3Fc!1yJ8aP%c* zfL<#)C`m3Ee{#(Iy7NKem-5A<@k=>34t^=8$KaR3rDO0*edf{lC7k@p!7rnyEfG=0 zFEJe?KBJ0XO5^Cy!7rol55E*cJRW`-odCa#PJmxVNuG|zFQZJs@vDko{(PDHK=8{? zuDtp9z%LBHjCNuNlR8i`dNP=bUy5!)Nn*vW2)~pMychgZJ~sh=8ND=qnPF&e8-riU zH0d0{drMYyU47s<5tk#yoY8xB)EM5Ffgj0u{@u9a znP5E6e(>XI3Op*A>!0?v=crKk$2HDGv$}o`g=elzwsIP(JBhx}WIiuTEm1Yl@7^J+ z=TIZZ+}V|hZP|R$J16MU2prVU1rqstt<5`UI%^AQwPFDoO0cKWHYS8vL4MDC;8dX7 zoSf;bnC3jek}2`W|5mvtc6sQ$*Ik)ruYG)8@v#j4?$HLdXXK3)8rCuaIyvZ6i@E$s zxc4!APOr18b)<+l|6e)W**6`Z5>aq-SMiojJ98+-b51)fbwCvcT>`BaivpebBi80! zMR=j^vXy6@^#y~@A-+Oh`e6QPYx5Cy<4#4va5z{{TpFwUfAs~ga7~zGf5oWx)Agr% zl$K5!En~=t(2^>~gsWZu{VFXY5GuF4N8e1b$5i*zh9+-WK*2u?o=E9qJB7{%nI4^Y zbeYLy2pJ2U&p&8w-dp6XDWurVIl>6J^}T^t^V_Y>33lU7S%I@*nzM!lk7AGiP{Vzx3u(Xc%mG=DpDGuP=*!e-;0w)6bK~PKpLC+mhNlZ~o^l*0X9cH0(7r?AA4{ zcEfb4O?2g|zTX^GUk(v>5mffNdGtLfJ$s$K&{rGXV)#71tmZxw*v~2(?nAj!&Fr!A zd24g)OlQeFxcSE_(?50gI|D3u6WB*Nlaf8qoxcx;pXt=yjq)m`{W$InO{E-FmF%4k zGuZcwu=kh~v$(~RcJ4Iy&2*OE?sO;5_M4kIdz(CH*{#l+TZ)+yzUg=T&YRB5QwO)3 zVjV_gjJ#B+QZ7haUtp{1gHOwdqYoZnxEQvry2QYCSu>#5t;WiU4ty1HW{P^3NqibR zW%L`n&8Ug(sp@f#?k}}eaC+ecUpXmjt0M#kA zspKZ?>t?M7atIVCK`%$?+Sn1;l@Ae4i_&l#V{XY>ra9?n!|Wz)&MtO>)RQ{7Mfzv~ zmMH5I5$r5-N{WIk=e2`p(#hz_hUIsPY;qw7a$>AOW3#=-=*izjPpGvSJ=GX<))(bE zEX^@9&pA`vxZT=#mp|@XFK^ua@@DWzUq9)1KTr@3-hj)k>j&K6jkK&^(-JP3E~~SJ zOO`VrF}H%Fc6q{v>4S8%=ooi$kdWTh)zg{Nze6;aC?e_RY3y;1_uXmy@p`l$<+h}Q z67FMhW&%SQBJ0|e*g;bQOFUI}$&wCI%*`@|3HK&+o=4O6z>$1Lp}okhV=}Qe+MI+` zl`-d@c}}-H58%L20_*&p*5-pn&Z@gvDD0??a0jaIu(kP}BIl_)g|_eT%(O-Y&bam6 zVi5j+_TC3BuIkJihcN0GdA&0YZK+EW>atzh=Is(?+nAum2nj|=P{9l=v9uf0?7nC* zf?^6faY&r&g-Tm$X%}185ABcbvMVZ0*p%uJ*@Q%@#8Qiv>eNy@5o*VnHAK<;zR&mG zI}9P06Wzb>zU${>_|EyBbME=`oaa2}oadhV;xhf#ED?rVmy2?|H50GY>9=O+;HUIk z(^uod^gyoN%eAEFYn(o<^6lMynpZi z4teK(ecXNiUA)i#9ZR2I3+>X~T)1eax#k`}-rX~57R^AEPC%#uA$nn|m~s5TE&Nd< zZxOzIBLWD0jh8v)FVxDE{^Dc~yMI={K{*8S`$FO+dgTO0lt@3syB3>dJ(3tIgxC0E zB-D=T4gGj64?T&mw$4IfkeU{V9_s~BBUI;?eK@LyYncX*RfsnQWn8WOb4Xc$bw zJIKeD;Oz)T+5+8{)G(#Lumo>TFr@Nv&StMA<@YnI{Y&+0E0C2weF9-&djh)FC&P4h zzJhs*EG2SD{4|CM3;9ZLF}!c}YYX*h{mKGp-z%|x!oRtzi@LSI7iTkpm8mx{XXI$ zL&S50c-Xi)1=>?)y`oWjS{s-wi+!KWXn+AMcPCWbnnl|&RqRC0Dm*>Hx0f)pVL}_H z11=^y7?Y43J-=7F6T7tyJ@}LXHY<#Lyc5wcGoM)8A|3`qQgi($8>l#WG8+0tCm&p<*I(+AXUb%VCcxlG9KaT< z%!fmm4==@hIBrhuMT7XJh0LNu_AGiS-tQjcOoM@wh_|$dV|jY4X%ttkz?mBJO~a`7 zpd6K<(0F8u{(N)Aid6mS)tfuDdwyp3e*4+=zUgQj``$78TfT3I?_ahDLU;l3Z{oCg zM|0j{bN*c4Aee#qxa){s`d*G)oVE4C05V6Qgi3s?p2N9x|7E z_|y(=)w?cEzZBssTj)`Ih$?EVAH||6us>g>Lfhnb!{MKOJ8m>| zVamnHo`LsZiuz=FhMF1Y7}qy%viVqvNqVN;O)$&0(jCp-W1y&-@ zQ2TYlB|h<_(a`5T$kyKB!)T*%h6mJkCmw(Rm`f3TO$jG=xWD78rRa3d@A{fzXeRwh zQMjfw40*>W4QmR~t7hXBjfj{Gd#6pJK%`_1Ml?QLn=7?j1G5+l)0L9b8u9Yi*JrIR z?a%_hcwc=@`(^(4j$iL!jAQ=(=6}c-FJ*aV$M++Z|IXw4F>`!BW{&U2%<=u0IldqJ z?>@dUo6h3%n(z(jndbJLv=VufA655r=2~#jQr*15Z@NW^hyFZPZ(j>6{ZAHs|cfc3cF4D&?b$qu8T)mS$wwgf&0ncpIY1HR6c z58YyZAFWfyC}uYC4}jJl(T^ClP~#ztc zV>@JEsj&_j_2K;nvu z9DRbb`tRg|kmRfJxY{UhPm}HFs2#PJQO8gGj*;aftBhLOZh6MX1xVBGc>|uLpe|^0H)5|h2U&R|jwheWCodIFE z9=2adzp7fq>8dIy_^Y--m0z_5Ce&4xt2Z}kfxog}(Fva2%vsM>|D64!ol{c5(@m!4 zdMvnTHC-s**|K&4{l+c{r{UCS8cuh*I8#_+*G0Rjhr_Cuc2kJB-?$Y^**;6+I*n^n zVEB-MMU{##)e(0aSEtz))d+0imu9W1DvUqQkwM#}%B9LpmsyY&2KF29t{KjRjG`bX zSD05AmzZLQYzqrxu+wPhK+_uet$KbJY(UJ%9K^7=!kmno<``NXa||s%Y^pTV&`PB# zA!e7@TTshlZ$T|%7edUgcGK)?6SM0XF40>Paj!;~>{lGY3BaW;%iwB}xfe5OZ=AtZ z8n%W=lbC8FVyekN5xXf_-lI21SqM8Yu;Yq4Id~;c4+gA7!d4s>BX1~Xkm0SeQFGs* zVKDI-ykaJY5inf~FHMCEiaiuF)rv;ECt<=^B~7ELmM*4Rqjpc7HGNYK&PL{T4vKii zy}utXZ?Yw8N}7DpZK+5acJ#!=_R9(o4lB)tYy5c0)sSCLi$(T^xd`l_b=Hm_u-m%$ zqtjdwns!?^eqa|VX5KA=5!c3OFz*(Hv5GY67h%bV7_$~ zCqvjzk^QCX2eIiDcrq*(u3_B+9gcZGjJ7t4%@oC^N0c>osW!KW-IL#8Mu!u!K^Pp#v?`nU#la97d$tdcOEy{N9ey#KHGX45GYp4Y=2_;5nrR16#^s^--jac`J1a(^ybWOF4 zBvZOjMEIFOr`ueWRF?ZrrEMb0A(0=5@-^GAzT|>fj71co)%%uNge|f;Bz=ahJ4rDp zQ-`Fe6j8jULZtN?p9u6dB~qwsiskXw6v~6HDZo6XUz3MR(e&$cS8w)ffm{9+l4tg( zX+OrxAI;){qf2o!$H_&OB#IUJ(f<-U?<=RRZ{zh}`y(=={HLhE$4nLYn5hEAGKC5h z%M>b5EK{gJu}q-?#WMZxrvhvLHG&wwA85-X4VO74Zu1tIeFywnu*wzFiQn8NQ!mwG zTXWMr3HYTKwNf+6Sryb8ltVXnSE1MN6PhtZmDi6Su@$Xss6jK1kQv4gXvRVQ7{w20 zM%cm7jQKLw(Y2Od#AnXK*iySazWnIwKz^&=$Zs=>p&fA|hAFho*i|JZ!+H>#VY{k{ zu?;$z6$p<>LcOU%ExUIbF)<-q7Pq{2E@m&!dGw-S?5O8${juYW*%Pz4`z!-F zrg&qSK4yMDeI#aa<03iQ(w&wb_RmJ0Vy=T?OOKkibWw*H>ziVfA);*PEY)AsACEAq zy}S@RUQU~hqIT05`HA!j;=j!u#_vurb~sisY*?}kQ*;W@AC&$?>=$L*(kN=x9|<$T zMA9zl52LhY$v35Yc!u@0ap7?556-%}jnbwirM+hO7}G@XT~eboxTLh-3>{@C;`SJ& zjZ5&!R5=*?+6Y5Cac!Vc>Nocw5jxD!4p`s@E4&1EtTOr#iS{Hct#G&oyI=AcWZ)Dw zEM;rcJYf4;h=CJk$Na%8f2{CJ^{@4V7Zd%*vQ|O`%+iA}*HDoYlPJGgcm$fOrKkjA z%_3z-AlF5;oyY~j*m%WWtOR$#ni)5pYkpd&a16&uI8ICr5U?zBA6#hPVNn_@wEqps#o7xL|z-d921Z-;?_5 zxBVNIZ?177ZRo1Ma)CB%F_QQFhqhmuc^?HRoOA zh93b7uT=!ZVx$Pm=^F3Y4J-`3r_lLzFMr*n&u9}KIY_a?A zI}7#Scm9+5FYf%*^oMy%Y6k6n9ahhyMulhEsPRY#KHZ$>nSmjPtwA|>r^dC`x3%Mt zUmQcrMKG~ZnSD3*^02%tpD|XUPfb69DcDuku_d&p9T!)G(pG{Vmy>>ZPd|3LnTqQK zu_7p)GSB~T_Lw5>F7Stg(HHg}<1CGp{_N%#Hp{G&!sNL5Fv_SnK6LBYYWheZe{32~ z46Cuo#>VTr*t*aH*|b93a(H`I-x;u6Ut;G+h4aRHKX<hT3_6iwg$=XxK zt!^kSEXBRXoi365F&W`eGyS91w1a8;YHVUsw=ElcWZh3E~@G7jOqIyb_Y|O}`uqi#z5P=REODc^nX+X>U z0vkk0E?fbP{Y=D|z*sthbpc)rm75U`i~aW8GF(wrljO#=NHQRykYsf}lK2*OkFC}D z3wq(AWUMkgfshBD7l{8lGQ?InoHg)l*?4H+i4z7tN_x+q+KvC795d#e=j52}Pyf7- z>7k+pdCjY}88m1VdZG~LJ z_h-_+^l(YV#s->E+`%O4&12AR(0by|l7h2Pq*Kw+@>aZZIzya%(1^Fgn@KeHY6n=J$AT*MHaHc0_=LsW}_!wV+E7) z;ld)WnFvmmFl8P#E>-sZwNO%nW! z-~t_5y}4U_i%>3X8DqAE@+=*O!Gzo8YDcudU)X2i@6GGw^!1D-Usx|3U50Dg<>F<| zUxqb*;nOYoxIykb*=AXn!ZB%V^hn2y7W@E==dRq!&|@h?eM5 z%xd)W=HbdHH(G{Q9D+UHgS$JiyI>@5l-&Bz)1p&hzQF~yXlx1IF%*aAnvE&a1T`By zvh7~8F~)RMl>2Mj)^1|jmd1sR~p2f7j_j@Oh4v1j27ZS`om+F5fxo24+vWdsZTBm ze%ow1A?xsofF8paHR>?8P8oHWTY+cfc%*o_BpkQqRxFi5iEk~zMayzVP>>08$W$HX z@fjKxhX^vg!iK5Nz)%#{KCM9ekBG?i%W1{yNS>}gPx&^_A2tssK84c>YtdeihBG&? zlCkvlQz8l&%joOkRNPjp`%*Ax>pnzg9RK&5 zFSWtI0r$6ObUfch}xC)!}5#uWCLqv_MXntHZ4YwKtUq8PKx^9TOu_t~5PY`;)N_G0}W6IdB z_gy}e^u%u%7jFqz8{`ub872Trj{7aFE%LicFes5Dd|_C&x!R;_HeRuq2Z%Rl#j|vh znP2;CJeb&F#M|78i(%yu)S6Drr9m5NYP~E{Ad|!Xq|#2Pqa{Th)O8zh%GsZUZYb(m z0#|oYe;aaTcjT=k*b7D7ONy|EEP**tMM+qQ6?H8s8Zm=bLPsTGxnI=2q-f9#%Er@^ zuqRX0=6&7_$ub)d8_%6f;DRSc%MHs-AC*aKr#og4-H>T+QNt86cdl>9po@xZTVsKa z$4csS%x)3_w--EBLhz0`KxHopb0 zRCTPb#o-T3**5x4!Zk`fB4ybn)&;ceFq|3DVEA-^%v+m#w7}Qim){Gg(^>sx&!^US zinE`Bw4at)r@*pj9pq+Tld&dEER_*sO{)AIHrCLd8Zx$f%(-+&vP^2d#(K9%UbnHx zD5pKu6>m>LZJWCUa15&*!W1iR?zO`NaM3i6<_6_kL377f15Bcoz1>9o0t6Y){D^S{D z%yNQ(y&%5FMLir3k_V(>Tw;t{F=)FXMqexj%x-G1u;slnEZ!^qw)e^xXBeVyXAzK!l zI23gmo7=_oM{gFj$+$%KHneK@+-y(g@5%QnZvH$?{%Ftn@h$|kwHDkMw>)fw(H4f8 zMk6?6nsKo31c+frEk9&ic!OL=!m#VMmyn&dg%>d`y#7Rd_5&849GOz)I`CEijXU$q z7YC!J2PC@7H2wOxYlxOPO&)_rZNITp%*in;M!W3Wza;h_9so-Zt<_}IVYg+1reGMR zpq#(PTZ6tCC|SKY2cLC8g>0|qHUq-k(3$uP5jXfL6|9u&2=Sz-wb$4R)qq!$uq*jA zEJAs)NJik4<@eG8AxMPteb9~|FBnM#xa4yIGbje-F`QJ&N>gmg<#@YGq&aLICBufp zhYzqq6=}x1OLZ_wt?7i8BQ4I&eKJ_ySf=}6k~TpO>F=^RBt|8dA7WId%jIv)6S=$Ghu)J z(SN?qoV8Caefg+#tE0Yr)YO-cn)>olQ(r!6>dQw>efg-VFCYCMefeKNU+$dZnYZaL zlVh5|Kam6Mz(M%Syff<+-Yk9#^EBrmlp!_esI58S3vRBBMVE31F19xAMToumwo7~* z5}&ag?o5|Mj5AYZVjh?2JEkw~buy-yL72&yJ;i_gLHe(h`Z0@Ru<9eW%LzV|ML+8Y zEK{(XSBn7G@Y);jAHD><6mq-gpJ}UIiM<*lK`VwK2C2G<~6n&Hx*;HNrIn~IKaR$M1l(Ot`8D!@q?UEAUM(rL!Z!!b(|c5DyJO&k&@H@0c%XR%;xZ_1I?%WIbD4o7tqO@dci zRymA$luSbSx-Bhr?39|8|E4U=A7Z=1H^p>W*|c2tVohsa+;WgEQOTH)(Wb#h0A%x{~L<(=L;+_GV|&ZRF4a2$m( zSXcjqj$-%{+JmN-7|tIW<=yexARKpPL#4DymWziCye(1N#V?5U8nta=*v;#9~Bc2$oYIT?6sQGFpk zTl|LRxv)9q!sgrEZ)oMuuQ+u~^8^;%wm4z(0x-#U;p698<_p@UXTcshrukktrj?Cp zn+_e*%Aa~e^A=t)-CS|S%w<2@enc-wH42KGuT9j8i;cqI@?D2&uoF;if-i0l= z?FHd--^=_GqIkbV@or4UKO5YaJ$Ku)(#G$pgl8%r+t1vk!o@g?0<MeerFG*0kGj z|E(ybT=){3zok7NSGH#q?Ros)vOUeu`%0U_tK|VXRhM?XFKo4I1>1E}+I2CCjK9Vj z^Y1r4AXWGf4%bb83tSe0DlB7rPidL|0!ctX`EMW<$AMo*o4<+XzCDc`!;aZusamGQ zi6X9~len)T?ky?ONgnjiL;rUDGb`Uaq^jAAQR<8E{~DK+7XJ@D;YKq^jW4c74L@kT zKY}P}JMfioEpu4Qd>Oy0b{t3SpP|ezqs(D#(=So%ag?}X)wH&00^D!G4TBp3aR@}= zs+s1rRhPZ7{jv8ZYkrjHO!7869?*C7h+~ck={xC*LXHf)0g9r8@jpk$bzerEmSBE1 z`wQb^TFV?aYxHG|hw`7>6+)p=3Gdc4vogO%_&6#vhHws^RFLeU4bnrYydd@>9;N5=d#DiMqJLsR2 z2>p^Mwwo{tf39u%J#w2u-wF3Nx)R;@JL%ROEi;UuUu&82a2#H3I)#|ii1|ANW7wL# zzY?N>Fo?1zU*h9`lgQRGU$G*`!m_kXL@X0gkued=WVx0pnMyd)FnkbYSeq$No)VP7 zG6+h)>^Uv4OiV*;lbn@GHa%R%PN;S#L$kuQ6%^UWB}ZLq{&+)`AP4{6gz?lhY{f!Gr|BPBsW*A z@?7?Yc2Bw30cX`><}`ce^={f+`Ne!YLD_ZNvb%Vuxqdxl)D~DG%(dlG|3c9`wmge| zM9Ye0;Q8^fzeY=be0IJI9F#_1i!mw!d?0GK>Az^1lOWEOaEL}Z^opQLKm+xIhzy4QfS!iQV z-oD&3%jdpX`P}D5#HxM&_sVC*T=}&0YiD48NDF4jevIf>kMixKN>fC!g~#c&~nsAv#Rf_>~QLL?tFqOBz@!R|-ATSTyLM)uw>)tj0Vsmp(_ zWu8P5QLv&|he2^udE%@TrFk+r$A2$wem{MF;YXEin{pK%OPdn2Emb4umxzR7G?tGE@BoYm zNC7ZsoWQd;iR^jvMUU%X4yJPc`I(maD=icAx<`aA3Nmj8GV$h9s&^n` zZ+@7ec$hbToX{;$9-PPd35z*zgLD{lqo+Zd+E$VoD114lAYT-LCrqQ^6(q(?h1548 zi*nczK0Mx5%ibzZR5#;6<-Z5@D^M??f5cL(ScNipHlsM45@C^*{Q{II+>%u&sizc$ zE`JuOIJbc^jb(VEtV)%ME%B@;Hq#WC(_e*i^#$g$Uff%v1s|R>pLIy9P*)5QK~IQm zc}l1t-XcOPm%j>Bu^7GR-8{uW{3}KGV#9?~G-?L}4GsD?7jI!lZtk00F7`v<;0O|I z7)4UN-EaWy?!5`|yf=?&nSanSr)BhvXqg8PX{lsCjErGHcsI*H!{G32?nA@LD0yA- zL1D~kb^|n+w@Au*0}Aae9R%7c3gjl##Ct~tvYFuW%69O2`tcy!s@$QSmX z_wEwY4irs;8MkZ_;h1&3UoJ+ra8jW;iMe)GD@cicjTm1llo(T{j)7kDNGs5sL6exX zYXM@EqF&xjd4i;Tn{oxA%-&5of>00drj>%Ef}67O&&Dhnwm;#p?LE6;TgYkm%=XRc z<9E(_U27__#DX^B`yIm{_@X_AXXgvlseWJO0^@hz?D*a1LA}lKYfjx5R+!!05{khG z=t8&tzc7By_m}4mVROpoTX=!}9a_+kU2tpG@4ruOMUf`rU>+fo!OUjkV1{0^T2X9O zQFCTf7jjq^K|Yaq%4TNQW8Qp3^%$EfX&e0g{pR1m=lR#WOLhn+FO9cvJCM^_8SnYS z=6G+AXVuEc-yFt2H(}cI$nf@-_DGnF?;}V<)3@C&fFGj>amuiiLvmRZcy5rfQQ8D_ zmkj=f7NFZvNpEc{kU99<@blh&7?Vi)ygAk}d16{Yc6e^tugvV8lxXt4ABrO7!FrIk z5Of919mEYI?6+oI8Kw8iYk-JbE8(x3aSuw|4#bTj>|e~dP-EVEU0z!S>;8I>39aBr6xJs)l6+3W`k zo#x>NEn-2RnXx*pSZGwARC<=_uo%?VM{6gRMz%+hm#lMrQlZ&2^1h)ks0r0*EQ!2- zNV9}xMDa!0v6wAn5U~t)rB6ybTLpPZQL>YAkwqzI*`Ud8?$R=!)G}e~nQ^3dVvQhs zZpdMC2jbWf!toLOh=AF|=A;Yk#Oq*GN{jNzp?IPW?Vb$FS`g&QyRJ$Q zWX-#7n;^)acik32!-6VBOP?p6D$R1Rb2f@P?zW7rvHhSp`~GzMYCK*ye-cloef4vU z6bQe$en-=L)+ZxGCdu_40L)FE^(g?)3rGc^^&OU9Y4)!OSNq2H3hM2muF2&xrmA*e zJ(UjWz6s5TF)JI%vT5QeMPJZj^5hR`newQ@9mtEuJs=)p&d7zd$%^_J0fq4v^%0_g z-lASY(dk7)grd`7JHaA=z+fBBb8{Cu2Y|C@ir8c^9Yzb}cM+PE)kev2Zijhc%`^!3Oje zbs=TE%$b@4r4flT7nrDESuAZ83LzVxBC#A%KI{|4#C_8?&<$;|hjXIj`I0SspWlKQ zaC6y&HAeZ1$YY-PeW?;LZbHL(zf>WJmGuci19-nwA_$G*{Zg?YX*U|NH%YsFsQ~}n zoriz!;Ii>@+MkVQC!!1albo*KPP0EJ|GjnG*EiWZZuRNw%kF(LYn-*p+n0vck^Kx$ z;l5OXA;J`a{e&KYeT2yZdkNhFhX`G^Q2)QE^6q<&D(_6|nVnN&c7Gc&{*(=aCaGh)Xd!_N|`$5QF( zyu}kXgVQl&Rt{^(+F|=_scA)j+58*$9RGTE72p|@SDWi)Kk~R8;^nRFHT9+JE}4tw ze9@P(W#JLE;}K)cRG<0KUo_Oc4@zwP;1*EMn#;2RHS!igM|d`f zQYdPZf{0T1QHj|EG`oM|Gk@GTEm>BWKe#8|T*)8aduPx$QasUnc(^$?qpWlEGHE&Vy^oUbdL^LYf zNGfcW)qi?aku+)bFrso(5v^oOhpc}PTdHcS`1>c!*fQ^z9n&&r(2n`1+aQ)Hus3YR z{gHS_;0c?%kl7mm-xrZUdK?hbX4pG!Wr`=U|sGi)(v7hf%!Vm8f?#h@8{KQe1ROAcBjYE3gMR<;lb92y}bSq51( zEwhcGy)u%qmuJznsNXDSEzwvbNnDHi&9c^_EWZWGaU^BsfU3?$=`jnHA7qqiD~jw- z&&IJ9V)_2KQb=a85_XxHd|zs89@(=jXocB0vhadUY(D^vFw1p-gADvg#vcaF-gfJ^ zHD310GD~=KFnRaN>Pmi_Bh9 zS)Kgd+p;783JeYm$}+JtCoudwraOvX&c+p-MBcR#Yo$s zJ%#X}A^chNpzL*`i)lwCuYwsY7r(#~&OE$*^lXYZ>ntO6Rrm)?*NHPvbNz}Lqi_XY ze@Q%sl3T*PwXxAqmT;ObN%aN#^E;mt9F>1yZ&VuRz68Daesxl<#rcErHjUI``h=}MYHSg z)B9)EUj}ZLa-|VmX7HlN4qODG4MB=RDEY`-c|TSt@?NpSWw>@Q&KTlgJ>|pZNEtMa zwVrkCKCEVO5t19u9G5|z;k5l{+aJMYANu-KV@+{$L887ME@byuE@b&|Aq(kw=F4O; z7qZ#&zg7o)PL6OQ0d4pdPO=`2I$W9>p3v>d(6LIyAFTt^Igj&ZMK__A{CbS zF%LCy>DZp8W#Z_hY?{3-o+NJ~hHP-2gqX`5w*%*OGYAv+8*F8oVJS?-c(E{#>Ar)R z*@yT{FMc{-gc88QT>NghweoA^F)jl>PKv@JMK8klMhmRPZi%2ATgPIZ*7p=H_6$hQ&8`uen`6P)Wji{tBl8G`M z1!t?9l2vZU5m~q@8T!Tp--*@m46)pMehcNR-Luth&-Zi*+x+%~{)tdBA+n!=_c~o_ z&b7qVhnHCKX_uwAAZzJyd3BC&-r#1@rPFBH!lm-QYW>og#22h~ly%h$N$heH0@mdU`;f#Su&?djg7~Rb<@TjFwVVyoyKN|?+G-L0>2>5K7wKvWxd$IWTtz+b+vCXVg@oi4AYzT*|QyhToHlI4xG zJzhbI-NyHRWp>TlnEtQW2YKBGd4*og-uK@|UaRc+GA6G-GF5Clw^dhLuRMv&cE`&s zUt7f8xDGOFkA2Yva)wzR0w@yU#kV*_X1iX^qcZNfIG=xm$N1Y@)M3uISh>pHC{M7= z^RrSUEBm=6*KjvCm#k3i+(>*5OJk^v!}0RHJ_l1R%p;`x6+7%{J5?W2Jx>RlvKP&S z;=jIrrMa5=6=fe=R^}syBr@`dj|q23vFLvqvj|}8%x;)s-AzM(eHLme+ZdkBQcmof zdP+Nx3`tEMo|15%5l@`iuuLrzPxLg%W9JYVk{KojIvmmMCYDb+&yJ8n7UMqp0L99X zCQt3N$}23IwJgSBzLJM9nXC?lfb#a@-Cyy1wl*Yua!6K&<0T$;t(iB>L#y$gMkZPm zUa2q3^TxEmD%nC6E9X6Z_{N@(?fEHZj(pCUqJ}v|)mU0phWjvIWX223d~tb#FD@JM z*0NEK=>V4*uEC7KE|d95WK;C&H2%iVUt{=<1I;)!yW*57v_03YiRlA4;K+OYc{@CE zTYe#Cvl`51aaOQoji%-fm=Dk5=^UDoM0*kwwQRI!;8Ok+4p%%D!!!zVT03OaEW@Ro&GpO7=~KELGax>@=pioaAz z(*K-BMOlf9sm!NQRIzJ&?)>>w?nlj^u=0rYD>BdgXS?x@b$BH;iqD!DcN{l9KW%K3 zNw$1>Oh;fM_EHg;HYDF5cuAsUQW$<|o`8e&$zBe;Z;+rIMv=EXW6pddXKuD2eKB3i zHHvbHay{J)x(;tGv5}IKI5dJlSiJ8pV1cDOOn%{vJw-qP99$1=91 z^Tjq5TPj{C*!47}Vq<*!73lmH%=PB@-e-<)%>Ff){o__e|1-X0H@Y~E?>K)Rn8dLm zZm!~HU3!Yer3b@btc=EaBOR9U*^PAR%tPkU!vLU6;IHFvk=P&43y>l5YXLIYVJ_ex z)*A8m=Fkf1d&2x1yq|x)yp$c{zqLh%F2)?U)4jEAK$dx;Wy(3`PkDcGekU@wc0at_ z(#DiuhWWMp&>Y>caaw=d_=;$U_3(@3v@Nf3cOdmkIy6E#oIK2VLpY|FxIWWW)-pQG ziZUi*aVI_&vjihlOa&MyTv+L{R;Bt8%O_SS$+VazNZC*I12G-LJW=Dhc@`qio5n12 zDo(A$?4%x~5IgB5Ya%Kypa%u422W`hICxXQ*zwpK=s3gWd{v%@K)OAOVkwIS=h7JS zZI&j81?EUxRLn>BsaWtz2@c_(o21xc@Wm)tYABR%GfFobn1zzzH>OSB<{*F+8EV42 zW;yZ@`&3*hOh+QP&X`6|CMevAnJGR#WFZ7)F;!@cl zMaQ}3%=vy&U@Epg2+IJSV}G^N{-P7UwcNs2Cvj_Zw{?+B#JWgk+_J|;jB*dGu-UcP zDq}lLoY?kx2;wgm`bqp1zm=o-YmZ^E_c?N96609Lu1NV2#F!n+@an;fxM+vqvnypZ z%UU94Z@^GX<5xU(q{`JcwBCA6>#gTZdl9jv0y30iIZsgsdIo^P;4*h5#HOSlN7V+L$oNef*-bIg~W z*qkOAg%RU-poc*hibdB;dMM_P%R%tc?Aiu)9qeN}l57jesE{36yne)$6LW&ZjoXo| zw|q@6e_8F=>ZK5VJbA0q;W>bN;!u6O{mylk=`F=B;9>2}D5_v@cBy38J#t}Xg zq8*0;QK4aD4}sVhZm!p65)VVXr2E8pV*lW;$OYvOEl)`;5{VR1bz{Zc}8Zgm<)Cy)@kCrCQFQNnV~G97g?6l zzJ_dm3fWn|+`hLEab)<4eEkLyUNPlMBy~NmnK5q}lQ^@oDm!=f0$!rwUHo2}#7~(H zL6~7p4|I{j*wQr}SE1?a({$VhB{~wC65{}x5`zWXcUX90d!0M)VTi}-(sq$lXv$GI zS!$Wk@g6x2#rq@pM`jaGLzfn~$(Gc%vr(IY!7A&(Ft(o>lh0Xw8E?-*XTqLMkGn|b zzlzR$=u%r}n&%yP`%Hbg&(xP<4MSgwH4J?@e=jU1hLFDh(U+&c+wz~KFXQ}$V1JL> zOKi*jj=2o|gUhtPp*fr7upK%uraXDEl;}(EJFM9X|m_Ty!+ z2k}os2mZMk!`mzNAz#xg8=>;$mtb%^0iF=SlW^AK{Rhjd1>TTl&^hJLQVEYy36Il) zZQ>}~Jn zmeUKr1sT&F2($GVCtpODK8H($x73g5uv=r7MQpE>=;$@uzh79-gO*3o8!{`R1lubl z))4;r2djDEuu>LdeZr!veYI%H*&F@yT*; zHg16gcSta*I~$xQ!4V1e#|L8-BUOwF5d?T0wRi=!_#*bEAtF5JlXpkUehmUPt+#w7 zGP)T{0&7ptCvsbc$<$mdVL5}vifs0oOQ0B$g=9B%naeY>Bk{>(T~phJV?#SF>NT5b zCfL#zb4|pwsNO7_0k**(_gvI+mQ6S4U#FL+8M{RMW!~H+axJ?`+dT#a5R)GN*Hy$L0^CBVZW#K!Ra10CT47tfgc%Dd><6Mum2 zu>Tn6+0zpH&$cJc^CVxOAvHm3Y=9ob?xn}5#WxOccbyv-*KXZ;@;v_?rGb-fZP!Nd zyWZ3qOY!%#^EPeIhsFEy;ZnI&M`rwwB;s zHq?$B^&*d*CzpKz}ngek6w>w?L3(-rQdZK z@W5+}qzE~HMp5b;+9wB2VB^vg{3L3O-fX$V{M)t)e@*)W`>D_c(D-HY|F5AFCX6J8 zS=!h)wN?A{tJq(C`Hl;Leg*W~+g3&g`GQ>hSsN9X4ye?Jaf=f^D4TlXcZtW)dD_Fz;Da)95AMLL zA4%LFIFcY&AD)K`XFnoEBmV?xzT4jrkq>Y1yXoz*DXkR^b~vB!wUQs*zDD# zKz64lDm(R3ZO=8Q&bCvR1aHH|aHRVL@W)4I&_e635=lA+q&==_4;Q8KZq$LuM-qnyBIjw34{47lB@S)49MYdq zf6jrVyC;8o`Q6g+!2ZdBVAAAIAemsbUEf0#s}c_Z+F}sF7_qvaosVz7o?YiJ;RSj4 z#8q_HA+2pcI{14B(6z@Nm&Z3gi!MK;eS3dk8eJYj`2NOc#gP+TKBPZwb~(Q3^`r~Z zfj++zi6$>>_W$N9=O^GktjMcJ-Z>Q*G<|(qV&~nl^~6{+uEum_9L&pbCnHn*g#v*u z_+S2A62#5D>&==!(X%rmy%#6qlaGRaC@8=EvBb+aU3o)(tz3cIlQ_BJpeuvve*A-^ zgoF7V=-Y&&x%d}JcAmQK>a}aN)+ZykAT5(=tsz|6=6^d;+x0kNHiopuJ@|VtKPs8n zd3~9AF{l|A_7%A!H(!vDu;S3c{9Y-f^%yi)P+aJ&(B{pNxcjhh1#)v?B0iVWi=(#7 zuetjAk~@+wUthZ6nwmd3`WO;jUWlNYk6ga>3x8Qt^MT91cvD@Cw(C0}to{xMVa%uDKZFiV$eb>l4r%((ew+px8ke-|o`2ms#8j=%g zE`X^lmy{KICO?i7%unU_ehQ09w7D6M)=!p}lirX_P8GXWgaQp630hvh$6gg;t$X>_ zn`_dwUGE@@wl^^_U82!R{6Kyf&z+Ezfoa?%=h5yxNt~!P%B=#jv9_xmV5`1+{c|{u zFs@t#SO{ob>C$&^AaLuuuQSPHkT;m{LO>s&epuVH{sY>cHA@DHbT8>bJr6BBs zxYPeREBxLHNf?+uPuo?GC$2cud~YQ}4(4}C@$@&eJvGLMv^^!phX-DEpMPwtUi_{E zrAp98tRQ?($#tc+_gj+HWk>3VQ8#HFSjnZHqmoba?)%X4N573%69Utv+O8uE`+Eu7 z#W1h7OBN+4=EtQtW_>dOS>I0*puV3rNvZE8CY1VS1ENMxYkM}J#%q`8Z`gJFj4fJykLpiZ)tdZ3U^=OGgZ>nHBGImD3I|szV#Ws7xe#pBL4RI~u}Ir{<%Rx+aAIu+ z+6x!orl8P}@2v;dxYBn{-Yw$My!$DsR1bm!)64Goi2f87{59EuX}A7-?KKk9oq&Xs z*V!4=+Zp&LuV}vavO3D=(OQJ|;eY7ei3@Oh#q;v8#$qe3$1mmgumCx+FkI$*-<6Ak zYtF?}+zFn8n2JTZ#j81C@*I3`P;S@lmq8MG2!n()#s~&%w2?1hGvbz>YCY(bue=J$Xyr&6=Wcbtznn-?3o-6hge(q^vEpTzS zw&$x-A6x(#Ty)>=oq)kLiOp*kne|S+ujyS$7~;Xnm4l!yqXH@>Mi$u7le+w zv^~!^UlV=vNw=2wl(x4=IzoH+>BJ*(hG#vjP_ag7m}(ngg=!D?wypgXGL~De2acvD zzCLi&z4P4!59H}_Pr_EM@ae63kR7h~Njq)TTclvP6Fuk+-kOO0LhXs(pp;GI4 zK4;dV{W(@6KOFQe3f3h-+wwzu6IbDD$$^1)(O>s(16Cxi)Hb-R~!>}^&ai$(^?*pQ-alP2L zPc%&MVozK@Kde2xA95#Z8ggeO$<4u-8@ikT3i- zJ%PYx*EdDG;cj~vW??i6K4bWE2{|!_Tko59Um;JF3&T5cskmO$vvt?AHD8bq?Bx$N z=Ptq>>-Zi4N~G+_4@76_eb>Gdyde=c_XZ9u zLhAKX|Z_(PBc40WtYUJKsJ9 z;~Vg9kHyDE0P7JBrUvU0&H98QuJ>M{5SCjne-vx6kG)`4=(#Sb&kIN1N_?&>zB*kP zkY}pRp`@nWtc}^0R&73TdTl0C&8p0=2V7!AgQO(}>k|_b2NKaiVO03az)2Uj1TgLb z`Qxs2=y<$zwCm4g9L5BrXfUa$@8~p+V`t^}69bnGXwA3C5iR5rbK{D?!9eubqwV^` zGTQ1cHi|sjo-5BiF{bUk+BI-ADe!BoOW~lD`Y|``X$T6&Lf6rC|AMUL{RHf1Y`P&Z z<-vz9pV4zNBHbT?^?$CQhXk#4$&u z6Kj_kYh9De?Gg=OEKe>q)`~$KX+#zW*V5<(FJ@KbZ@~u!JvV-S^OLjZttijtqni-f z+Ht{e6fc9`d^Z}q`wuOKSzdb+@>nH#+<83=A1n0kjR*6mVb&xx=TD=2?q-IYimK)R z&_F_Yq4a5}$zmuWl8^Luu6Jt(nL-NJC;tQnGj2rL&Ul_^?*Dw=|HLIIQG&MX3BtZ@xEOT0yK$hM`-~9`66ec7Wb&zV}?4-z(*k#o+&j(S>gR-_7?f zu{a6+FhU>qBOSUTvk!*2->#Fk=k>`CvGMGXf!EI2`O35yicx!&iUy6HucLnhQ|`zI zky#*|7#MV$4Ia;Lx}lie|M{IyZ2rn(C|QW^uKO`Z9K2V4%YO&+kISDkwES_i<&P)S z{ON4V?+V@ZkvWBYbHAtNJpcWY9n5;>6=*;jD{Rr(^!mT&PqE;M@QCQeZDu+V6nu?>_bK=s1)r|qT?#&e4@fK|Kf?;XN5Qu$_&Nn& zq2O~Be1?K|EBGmV!D6BI8By@P3cgLj*DLr+1)rzjGZlQYf{)_M6AQJ^sDkfP@a+oT zui&>R_yPsLT)}%3{BeA@VxjgKQ}F!?zC*z`D)?;*zEHtuDfkoxKaFo-EYv>Z3O=OZ zI~9CT!B;8xVg;YA;8PX+48EzcQ2T@x{GfvGQt(X*zFNVTDEO5MK25b^ z8&dGy3cf|b*C=?O126Wv7>+)pC|N$wEC;5^8K+t+m}~er``@dOPw<-8S1)rthQxyF4|5>!FMY7pn|V*-~&^sw!C;`@9;FS zDMGTqV9MtGE}Y5Bex#FpeGCz`C!FPL8lMhXXgrNO@QU*N1j){-d|yMvh2(#m!}D$V zFI4bZ3O+@_PydyoeH461!FMY7pn|Vb@Wl!~TfwI)_!)e@V3O=ads}y{(g3ng)sSdnTf1UixGusDF@qa4u7qC}5!Jnypo$}kI z$gjd7KU+R>6?}$*cPscQd~W1S^|7BnqTqWKe4B!=SMZezK2O1CD)?jtAN|6@?K7(2 z`xJb;g7+)Kk(3cgCg7c2N|1)r+mXKq}$eZmTUP{DU8_$CEkt>8-({7MC%rr;A4{KV#k z+iyt0cPsc71z)4!eF{ED!KW*Dmx7Prvn&hgr(p%(qu^T=e4T=?Q1H15K10E~75vm+ zEZjaL3cgptw<-8~1z)M)^Avohf=^cPQGAYNA^90q@O=utUBUYm{1ydYpx~D)c#ncV zUbb-ij4Akj1>d3I8x{OE1z)J(vlM)af}i#++&<$9KBV9~6?{;^S1I^n1)r_pQx*IS zJ}I-%_zEldK?UEX;F}bDwSq5E@GBL3nu1SI@Dn#I+djWI~07Qg5Rd#3l)5pf=^NK z)9V**pK%2rQt+J$KB(ZU6nwFQ&sOlM3V!D5h1(~r;0G0amx6Cn@YM>wM8U6A@M#J@ zLBUTHEZlxW3cg#xw^A~QPQ3cKk(3cgCg7c2N|1)r+mXI3xVK4AqvsNlO4e3OE&R`4YXex-s> zQ}782eqz>QN5`Ms0K(sRx? zFF>Drzl-&LU~>_^z%z4(R|FrqOy0yu#nn)9zewzTz2>46Gk!8IJv&3PD^V^p*=g@@ z#GaQNOYfHSQYG9gW#3PHs^t^eb`Ejxv!35UzA_oq{W+&a=;`zR<;R_3QvdgzUT(rc{m+;l z*Xg8C)XU`l?NfmUH*Tpu@)5bf)^mB28@IXL`=tCTO*S5>{$q&tBc4BlG(VDcvEUTq zOyX4HnU6_$8gVki(}|Z8XAmb4XA(~{{&M0JhG!8M{E6g~O`Jo#l6dB$5}rfc&iJ{+ zCCn#}xR|(rxP@^Fi5oK{Z832x!%K*>ST7%O1#ty&$})*xNu15_EyQ&!!#3h7;ws{L z;%eeb;u_)_;yU7O#P!5JVn1;OaU*dxagcZmaT9SD%hN)fPTWfDXPh?TM&fqjJjUrD z-p2ZN5_dAZi#V0In|KT3^blt-yq7qQxR1D+ar%j?h(p9-w)vnLXQ{N?5OI*@87A%{ z9w9Da+ELEJxPv%KyoLRBoOmV6KTVv*JZFfr z7@m+N^1PhbMV!SrZsJtpWHS!2hd7xyg*cBml{lL?jd&$-I<h25~NNCUF*~7yXgt z#MLZA7I7=%Fh(> z2yxVmPkfxXhj^OU$FwuV!wgRl>*SGc=IFH75FaPbB_1QrBX%*L0^%8l7ZOhq z7ZZnxONb|keZ&#s3gSApen3JX8LOJ?ztJ;x>lY5LdFz>xg?;wtC_r zVn1;&aU*dnagex!xQV!(xP`clxRtn(xQ)1rxShC{4iUEy4-(f951HX?t6}0+;t}FD;!)y8w(S^kkm2LRDeQ|daT@Ui zaVl|yxQX$nh#QHcW*q9VB9MaClqjN>BSLhL3UCr&0FBlZxl zWIidxY3$!r;tb+6VmEO*aVl{Jv4=R5*hRdYIGs3)*w3IXEBbSIFGoIIF0!Pi6@x0i8zDdEyO;Sr|cMn4-;4NStG>7 z3?C(KV%f%sgT&*+TNpn~oXb2Xh;xV|#1kyT6mgh1O5DW!j}wnDe42Qac!oHWeUX55 zjqykYv5PpHec>j~VHuK%eWv^q_b{In;%VYk;snM|BM!3+>BLjS8N_am-%K+;@p57p zaTf73<7X2eCtgV$WZiR!Lu{*D;vA;UBkp5(0dY3N3yJ#~UQE1_;U&bytgnx_g1CbC zIO|(UT*&Y(#LJn_HsW^TD&iToLp58;xKU!@dR-%ag?}^_&9Mt@icLW zc!qe8c$|2Mc#L?MIF)4^Ax>(Z`P9Yv5P9+{D zP9q*6PA48E&LAEm&LnoR49khriL;286K4}=6R#v*Nt{EROPotQ#XR$fBg6&76U2qY zQQ~6aagMJN;xS?$aTRq%1#vgWS|xFmV{i*`0rS~LJi_oQ;#|hBChj4wA>Kw@XU3sU zt|#tdxSx1A$8sZa2g8HJ84PbC?qqliaVEoCi7Of2Mx4$3+ldERuMXl6aVK#)TCSNZdobg>~#DUP)coN1Vd&e&R~v5OFr+3=+4qY(vC(#KXkP8GnR0m*JztgDn3T zaUJ7~6KAnJVd8X#PY`DiM~E|tr-%!fXOwu5?QooUhVVfkIe zy^QZBE@Ym`#C;6+5EnB%g}8(`mDod^Mx0EXP8?#|3}PR{Gl{pc{L6`}h_i?b89$r2 zpLnGihd770k~o*Rn>den8*u?~1#uy90dX;L4si+b7M90HJj%YPAl}CCO5z~#7GgKs za2v6UxQe)*ajJ={iED_fi0gtV8g}8~~t;917 zZzFDDcsp^F;T^<{4DTeKVt5y^pW)raLk#aB_OP72#DyH=eZ*aqlYZg?;*c4~lz-xt z%x8#rjCh#1mCqU>_A&oa;u7L9;xOZn6W1|*n0T1s6T}q^j}VVDe2Tb+;Zfq{?3d%j z+gSc-;+3ZS6K4}A;9$sjq@CDB+)C^w?juen_7i)EyNFYW8;Mhi>xk2cJBZVXn}{=r zgT$G{EyT--yNR=i+laG?dx%#O*AwRu_nZ2kIK=Qg;!ffM;uO}skhsK@e`1d*|0ZS| z`iSe<7Zt>L%)gSjjd%-jJMlK+7V3~H;tA$cOCuJOqEB+k)XdP+v*v21*^2%nru z;U|3J&!6U`d|-m;Tdd@%-FWI~)7?=I4}dj6|=(Dd+AhJ|Mj7M!cGA^^eVu zkiXcG?;(G#Bi};)Rj*V2)#RUcd0r2f54IVkl*3RN7qRGZ*=5G$ggqad&qy> zk#8Zt*paU$|C-0CeTvCH>&R!3-{Z)8$bZL?k6tPDzsr#yA^$~3zK8r;N4|ypCms1} z@)tVt#pI7^PVJLL{y9h9Lw=tlAI+8ef7g*8A%Bk}-$Q<@Bi}-Py(3>u{?m?pG5HTT z@>%5HywItAJmg<+_mIEHk&j+3 z^?x_nseMMszwF5OkU!waw~+s#BVSGatB!mz`R$H;7Wo?-c@Ozjj(jvn>c7;HA0fZU zk?$e@$^}mC*FyfVBVSGaA07E(@?Ur4v&i4>$a~0_JMz)hQvWL)`4RFLJMul`&voQm z$iKSSseP)+KkdjDlYi8a&m#YTBkv)^9r+RRYaIC=@*j8PTgWeVc507Y@-I8`>EsVM@(JXB=*WjxO8vj;$cM;pcjP&WMl-{Z)qlmCt* zpFsXDM?Snl>ioziEDadp-(D?A>2n;Q8O3pI@GHe$~wHqIvn*&nqVXZh}*LWRZW_k@t{4 z;K)b+OzQJPM}CC-R~`8t^4lHx7V7&{FUiwr&uXp6r$$#3B zPayvRM?Sn<>i_0DPVEyS|AHgmLH=<^-cSA^N4}E$Zbv?s{9ilr>Et&!@(JWGapc3F zlKOwhkq?o7YsRU4I>^81$ot9fcjPO{|G<&YC4ZkIpHBW3M?Qi4b&h=alT!cBIPxL# z7di4B{3=JjgZxrQ z-cNp!BVS4WmA9PQFPHpbM?RhWKRWUW$D7^5u?v2l*=;c|ZA!9r;S~ z=Q{GaI zfDs~61++8)t1O@dk`0IkqcsRhfZED~FSQYO1(C#Eb~l^La6`0$XcehdORd$Y2tgDQ zzyy$DK#L%v5s}`oR0G%$US$8@bLQ?#Vs3q&-{+qX+`V_c^K#CaGiT1sotew{OjF#$ z_ykjYHse>A;yH|WGsQC*|F+FcJ{HFJn&M4Y5dZ5;@mj{8HN{smUS^7W7{A*TpUrr_ zDW1dlFjG8}@gAnQh4GW8&E(VcGva@rDPGI?yQcVR##fo*9>y1&;NJKWvK6X1v}M&td#kQ#_OLN>kjz_&ig*=`!MfswrN}_-Ipn zHRA(JaS!8(rub~ekDfA9tP4P^|UpK`qj6Z3LH)Rt4kC@`MjNfUBuV(xPQ{2P& zAX9ucq{|ZyQmhpwA_-e*yn&KYDCz#^18Nb35 z&tbfqDW1vrw~c_}!-XY{v6V@f^m7nc|s@ z_b|mRjGt^VlTXv7#Q#21yq58IP4U%?uQJ6wj4w9DXEQ#>6whINvMHWPI8Ld-TFe#0 z5sRmBu&`}whxb*H`Hq&1So}naPv7+TFY#;R;_v(Jr{h;q{PI^3v-A1z62>b{@j}Mu znc`WDPc_BujE^?OTP`8`2AJZFj3=7n)r=qg){MU@#&??HC5*priWf5eq$!@o_#>vc zo$)(O@s|F?{|%;iBjbZi@oL7CP4OzmkNw+BJ|&FrHpL4Wf6EllVtj=uZfAUM@mEaoD#n+X;w6kfXo?pyew!(t z#rUBK~hM z#TywPWQtcao@|O&F@Ef*nS4qZ-))K)GX9n+p2heIQ{2w@LQ}k@C-Fbi6mMjFf+=3j z_!Xvj731AZ@e; z6HW1I#*a3c$*+p>ou+sR`cp>9&nc`WDuQ0{!j4w3BG35pRXPV-Tj88Dds~Nw-6t7~un<-wx z__tq}$)}LZ`% z*ct!K6mLl;{x_N8jf}r&idQpUZi-hiexE5`!uS+ZypZt`rg#?PeN1sX<7W?=$)}|Y z@&AP>-pKeCQ@on-S4{CL#+R7lC5%64iWf3|n<<{f__e0Eo$>yrc#DR=) zY>HPiUT=z5G5)G4Ucz{#DPG9EJrKPB)Au9|P|dwjf&K1ffr1ZrKm zh)E~Zpl`A0wSNLuA82(A(0mIh9su>4!TRe657fH5(R~%}vum}tPp%4w1GS2?C6p{5 zw2eJ><8vX423wJzjXu24U>%GqvxN5rY9Ae>`6z{>-j&`-6#W`t4L+ikQV7Yw=D|ON zecLklTO(ESPoB4u$J|a6)nhlN@KHZ)!~%W&0YzHiCh9N2R#enw*Luz*xcfIaYbj83 z){$j}7S&VWbKOM^3^=>ESpqn!im%jchkczsj`qJujeil*jd%${fzpf*anI)s@@-hp<{Nf;&G+p=zVI;`+E> z+AIyh-3XySRNG*xpaZA4V$(%%9}ucSE%=F%%RdJE5EjADWFCF7e@0Zlgrt<&Tci)I zYK!~02p*OZ`pl_{;ZMflMX<%?P2VKaM1sQ!UV+Z(AyB zXXocZc{ingEaSQR>u-%fMb@d66jVd18rY%uTd1^h8%|_Gou&v|Yn{#Q3}uowX96-B zkluO}Din!!nXvhG*i`v-8>k&3CE-U;VD~saFROdZkMnvpKCeqCFRRQeQRYQI`aA4u zTI1+S>@2UDoR<-e^GcL?C7`P!;_;*3i@X}j?O>alb~e^z(AFMhpa)NMep0-?i(;Fy z?zHf)--%O}Ad+6{XLZMte1|hcsy%D3^5+Bd65mQt*6maaTJSv=#~yW$>uw*Kc%OGE z?}`H-A3nXeE|lc^I^(jm^w7k>4tFl9c3?+&zVZ#^87(9;npizh*PP`0DkCM$MrVQH zt4R9a$mw+A;4xXz5qckx?NcpX4Fy_OJ+jsn|68C+1c%`n%v?tL zBeKbqx-Qm&!S%9bpHa}V>zW@Y@6MSD2?Sad|I0|I71RU{D$Wnpg4fi#8e&k%+pg{w z!F-wDm15as+_l&L!nx|CxoVJrz+UKEBieIOdIP6H4i@CNyf%A>cwsbR_)6`G?rX;; zxJRhPYt5~>RM`erPf!tpE@;8u7=#vrP==a6M!4G2ybv^H?|?0>tfl~GwHEvn z#dW?GZ4YX}S`i$9qOK2zEtW-@@=&5P@grR zS3mZ3A{XM$Z2k_<+}z{Zdj;FCWt8fqV$aPwsr1aj#hyEa?r^c^X3`xl_S|&3!^NI! zr#oEiN%()04NsHkV)2e4optvT58JfDQ5&%0!lHh9>SeXiCQ#MOZXn`zxYN}jiBApE zbAx9!V$okHUG)+!@%+ zwGw#qLO9$!5!8(r&T3J-)={Tuqwom1$KtDBkoH`LV390VQK4g;Y4e&Ljq|@j6@%CO ztosj)63*AaY+gDEDxUZbxZ6{R<)A=B|vAygk%^9xkX;bo*xkO2wcIta3z{V!e%4fkgvSR{$JIhA`Y z$>1Bv;49Fdn|1%5QEJgkM6MKroy5TUl4mC|u)^foqZ*TEkE%?box~8;nVan_2D_m( zlRM%6tB(9X{NMN&?w8cOY!ZQQHN*!)ktzf;!Fn!O3^J5(sbUUp%MhA7RYs87>3D&( z6M|F%>!3O^N2!j@FH->9CA2|xw;uR8n(YZeMr@3;1&-c!-?j(jH{M1+jpGiZ{VVJr zzL!R;^701Lxe}@5>ya{(iNz0DefrTqKFjVQds*_MZR`(3($g6YcA1T77F8Xyko$do z$N5M^lt=ahbHeC_ZCDf-$v>_?nd#kB`C-HsHz1}cUxH^!mvlARVYDg^eHNj3@-L^S zB3q1KwLvH%NHyTtGjHCQg4FrH6U$cPF|b43>Pj`*`wJ8ya1fQnm?|iSV-w|yI$1`j zT1iiiO{Q$-9 zq%kRAFI=@2`Fl6Lg2S}v&t*rwkX6^mJkM&?MSt;+BseUOY_{c-?e%j+)DI0OGG&&c z)TWRAajw7mQLf)SXXJV_a@E&6!P{6GR@lkv;}=dZ|JqJQ8D%{26|*{z~DHE^)(GCivbN?V`sMW|1#zQ87Ntoxs| zS@g%dcMu3Va&HYC07ic?nOqs6zVcZlJ(C9=;AN*j#XxpgKYkitoNEiah7tLh=(m(+cXLN*iIYFlJX(@vk|FpTS{E3Q(fiT_xA%+jw%j>2tI z^Q|KIHV!6$^!kcr>v5;L&>m6;hZ|LldICFK_lnJb!wZAZrQBgg+pm~t<(SZhzT$CP zAng7(#tg(Li6p+JjAuS{RPO>d;e!x$VCEtkW{kkwSawQ`s*1M1*!eLHAt78 zhQjC%?hOWZ>|vrJDZSA?pc6h9%_$%rGhr`{)@sQQkT}-zH4yrrd z$3y+aL&R7Ybsm*bO zmD7_b--4?uV{M}QaOGRLg6S`nz{5}_Nj*{B1yn~^C5c7#mFkbx4&Ty*<_$3H(uz+% zz;I%Z_Y5i3e4AQH&uSyD4eywqIwYSi0}R+rt1@ZX5H?}Kr{K>QM| zxJJr5-^wEiNV*SPpFpeo-+<)jR{v|0%Wl=HPLX*;Yr`;P8~V9TWIaSz*+FAOGDCLI z&%h=`^%e4p<9C(__J0+Eajunvli*?;HU&bvXScRm5|zMfl%d-erN}l40Wbnq{8)55 z^sm8LLmr;$uGQ<7NGSvthe_pJ7mH=(xMTLn@URGq#rlOfU@z3i7~hE>^Z&nN{tqW( z%r~HAOXi7@AMsz=o`3iUXzErP#$LduZP}1UrgMz`L|TODzS307qum<3B^Tt_RCpi2 z9drXyzdL&`!3##JAIIyX*x*7GaZTTmZkx#KYaQuKO=)pm@7*#a(_+aTQ{1xXQ0U4{ zgYh8kq3}}t1}n{NTDc(sF+1Z&;sl9fgyW?zb_@A7=}T$a?Kj&`*M9=&H6h_ zEp0;o7ku{zZuFJMkObd5wJ82S;V!#XJ$3JgRD^hX3u5@*>z08BOW7i|_=x7`2i18T zcbN!QoqG1cY*=9%Mu{gQ_C+m1!_b8#VLy%0)ZMakNX)ivt{p*? z23j{Ge@mGXYyT4+rx%?YpWW)HTl5JX|9!QbZi%-Kaq@wGa71{XJx`T*9F=$_F8dG|atWfOI8WIf{O%XjQ9y+n)>&-JyUQH(6MdAAU&-HTJ* zM?wQI|5ea3eoVpfMK7To&6B+bO$6rb3d;}S(D3Y9e8(7;lEIaq0&XwLTT`P_ zjPlm5eA%A8$KOMth6=nt7qn*Yz}Ox2J{OZKq^BE6a0_k`!S&~)YK#M*o>4W992QS( zMtF8>mFN#1#ANHpg4C1)>c_4`^_}gYIDwvfU*@ zCWQZilS=2MM~i#J-+t@RftweS3WErY4?4M`JD!Ie1REgRj>v` zp>9c{i5AIU^CJ_2_2*A1Jp&a;i6?74JuJY(0S-E(dH9|}4rwL0-oN9rBo5>o3dupGx!+Nj zj-fI{fM^I?gp?`sAJ}1NK?OC)31glntx`04X#NaC$5{JRHAxi&G!^?NUOq?$)-TQp^ymu*Gc+G&B7k4BuTa8 zB$UQ;RiTUcCt}}XlyDk#v zsb@-HHncXPYlAI6gqxcYK&>q7+f4VoSAu;{l4v9tey9N&j0u*#etL1wNIiywN%4$J@d_y4- z{b;Y>0kRo^+K7&j1eA*RK>qkK%cOq4frk$I-H{(k^^@(jYiIoENEzj4KOPPQDCm&Z z#P<|(NNdEE*`Pqap^y&z5DjRrY^Me58)nIf14o^qs7u|5@>8lV-kFA2`OtA_xOzhI z-9+;(nB3HYkHU!KwO(*G8FSdvsb|O*tJ}TXs2?(%6Az@-Vg7z5jvK^w`g<#BQ#~~S zZyjADW_jFh9(mo40X#-VYKOQ9b+U)FQIe<=Dxh|vobtPOJ2$EoRDwFAn^hg#Ek|V} zyEc>>X$Y76a2_t7oUE7QYm7&u?+a63fI-KnLE7+sE)mWQydPl`g;up_ms+qL)stg` zIdbl&yHvXS9CuE>Yot3ng?%zdc+x@R9M#!mywxjeA=Sb=MfpN8g}18mJH>N8c&9OY z8R^f@!<*p#{4U{}zY0W=+leubNKgYg=TLbb3&u9SwnQa(8s4uMZ&L%45H7~!YbJTP z*$f>Bi?_c!g|xnZ;VS#DiH-(E`+!pP7^!iBsn(IpDS@_*#Fw(u{kiu7-6{T66wL{S z?UT}RnU*0mD%yL-f;UNuKLH*z*ws=IhTrGyj3p8ln8lcVb|%uz9W2U^e;E#6Zvjt= z_IC>Xad1Z2C53$ZHE4O0&aFO0H2%;04>=XwY_UPM`sT@9Eq%M@(!%d)}`(YslaQj-#V5 zBUOi58h1@0xK?c>aQ(5{?IJ?a*gn@i?mT|6aq=QmVtM8MT z^}{<7E!r}pN)T87H3Y4m^)37!LjMX`WK-++y?v|k`d@p8a)c5D(upiBgRX&0T<_)4 zMbg4HioYK5DbiqqPpD`0Zfs?GGBXrmqY;7l;Rwy>*C+)^nW#K>*_q9#r1YQX-L601 zz)kFV+0O0U)DAsA8!?sPpD9nn@YnjO+v>)N_FkvI1N$Tv0g& z-Na1ibbtE+({0dMhZeQufyLX$i{+%zVwE$HX=|QDG73u$-pJOppgL4-INs=u1giWmKY-}!rs);GztIV#* zZ# zE#P|!Ii$_Sl`RSd@(qPVObcZ$q^Vn)$OeXG7@qLGv@oIjHQ&Fnz>7K;+qdV#p$wkY z4qY5EpT9W?7yD!=Pfm8T0m6LuFVy<%+6{v2UMZKXFAZ$DR$mr@med;%; z^^?l_379!`P1YtQaKFx7<&&|la)#mhL_5j|wpe;tGYr3mJ4+6W_{KEl+ugg3oMt)a z{qh1#deZu`h(C=tc+#JqrUvNUn_9F~{Rl6+P^}8P19kK6&OS(P+R`A@jAxT+JWLu` zjYxT?;SI20s@Bj*0@==nbe$iV-2|pu6 zW-`$8SNuMoEjX5N+_5+NAeT&~)+l#`X+ET9=~`ThwlNVX9z=i?CW4Be!IX4D#NCnz zN^LLNcA)q;ex1jaA={N9O+-`;p54{T@ZG|>R4HEs`563iQ5neEE}8sL8M2SkBEbx} zzsP4MT-WLFSEs>H^h|}{YyT|?#y*3E1pk;EI24K)c<4D}Kfr0Ql+(^33!0B|)+j^% zp$vhGH*I?^NSI#%0bzy_5cpoo?>Eog@c58-#l) zOlo;soJ8#v53@w4pFwt|Yn34lC^a7>Oeg272wo{jpV0%|$_^yGnH-Zt;=c3OZr|hl-nYS8bx@P%(+xxf0Ynx1s3m zh+e=6n@%dz$?q&chBFFK<9F@>R#b&N3ibm-7c&E7Ph+x;{?d9nR)T&pvX4C;DsI#t zCQ+O@RE$FGRLJxKbi#HgvYhTj*fh${=|NtNApiCgRvw|ua)Q_5BJgU@IKlnMtOD>{ zTwI;+yO5&{(OE_qA)HYHhtcPNTDaFUKEzD;a%z=G_vC!8Jo`Q1(EdA8-VAUy!%(W3 zG@_ya`;0nBa0Uiiq-!%Fn4Sn>YrD(4jaoY!g6R4HxgHPm|5fTf^&_LkowcaZ?1LTZ z%lRI%w|+^rf(o%aYq?hRyEi3T4wkM4miHx!?&++K1OLh3Q_+O9k}8sL1F%>sEUbzk z2Y>b$UUQtVi;9W>_(DVk^M)%`mA) z5#)X6UPLZJePQr%2ar2S;cxx|RCi)0MoaRX?;R-Kh4$#&mFqi~qXbT&dITxxbk8Fb zXhphQ?gM*Dix3NJzB7-{?^0pQDc-8?#A{Z#D)R@{9ZU8d9_Za!3-MRjeP509?(op< zqy%4WV)0hvZERNEu~gq-#k;eKqp3SN**Nb`j$4=zmoCv)nw9Fr0cdVE1a98h6 zS`=Ghr*z0Cmabz)iE$Yv`D(2)qj1vv+v<*``wl00ceX_{LdNYgiqAQ*W6oFt8fDGu ztL;*}weHve-{A!BP8xVg(ojPC9OH}N9OH{f>R5y|u81za+T^(POITmUGegs~ibLZt z)rAk>YMvb}xZ@WvHgdT1m)^&!$XdCuDqg=)f3#l2E_1-gbZY`Q&nhzp08?fRwFeQOr-|)D*mak z(Mx`3tFd5i$n!&j%dV{Z0DfcO287qpWD?ee`u~mP8B3P-y#_@2cPPuZWo{eQ>`w8V z$5@~b;#J)9mx|XI6;C~VEqL~x#e315`Gd42nV9qPo#{INikciMbLq0(h@WsK{1v}5 z4fXV%O+ZX{*BT4(P-1qixAZk4#XV?_cwq#}^PY8B5Mh{Fv{v2!OG_qA-~|Z?jYrVw z#>@G^2%DpB4Gr_2{S~F?ZKS~a`bY`|LCX3MQ|jiZ%P0%seoek9w8(|ig4M%FcBTN$Gt(e;|rXP|&H>MLY zkBH@+g5*s;5ZM_OtPy)bU>3#(c~6K~BI(VYjPX-=X$RHvo+3>tY2)ok;3d^1__W`yysoYg+Key zPXDAT8>@AeR_T9EvC#5yKPYGa&%ixTg$O`n=+GYc{jgj=2K{{yv9RO;e(G2(#u$}- zP+RXpP$WOk4b(p1mPFdeIjmI5&-I>@?IS+@1CAEg+}51z99OSMlaR*vDOW(d0rr4_PP)YsqslVj!NN-QoruW);(JdJC>Ow;8IFNff_^N;j0g z=YgowV+}(5LXVrJ(_j67E&9Ge(l<-29}W6wM!zMF8s5V2;z!|dWCze~co7dPg~@Kv zMrigyv3V5^k_v>;@@84p;##%nh+3eNa(AGxTa3cr?~hW*6a6i2n{S&zTyGF3-#3sB z#;;E>^po0xD;d)%XpWlaEKXrUL~1V*SJr#>%dn36EAcsKOmozV8X2e4{OQfQtGlwk zY9%72>ud^kKbBltj$^gS>eeT17AjcbvPP6CUZ9-}>eGFy6Fu z75<9ps8+eIhT6MKy@6CgtGWab+E=7KjfWjR6NWLFpW+yy-DXv{yN}ZOoZDsSX_O${$S9Uy}} zsYxq*!FRU5lDnN2DSr5$aJU|QI|LzJhtBPo7H`XvQF`R)wS-cUdp=RdPz5vTlA-=qk^-rg^`l zgejab$vr?>*VWggAUYzGml=ti=sP+tWp}KqDA6Zt6D^)|we$L6O2B=@C`nm&o$u(t zx}(V{^`S;A=!N(m&aBvP-8>fDo(jG18E0{2Vf~e}MO!%tFYVCYMN(9Mkn6X2J&Nb6 zd|Tu6r?f>2t|^ODcqQGTw@dn*^e2=gN?XL*_1&&R#oq}XiQ0n(&sZGPiiQI_+P=NW z=B9bpqTi&p+|gb{+Vh>zK6UX4#PYuTA6)6rokt4-uzPSZgf$+<;BLV(*9_HL4g~JihAH@^Kdh*fVSP03a9U;v0UiDfvt(lh=O&&QhM3+BOCs_6 zqNLtJeGt!hW1WIrdm#5RU(^_zH~ zey4}}-`CjRR@N1yi4}d2|Cq`_RP0jTUsg^>wrY1PtuDP={jlz9D;E4oj}BgL^zA#QD!RW(^90)XgfY%)*L9+F z?a+^WTkTQ%EjYVQ6YGuDXwh5kx41up+lsgSpi&gA5ug(PsLZ5QM7c4FSmLz%v0!ek z`{EnfqyM<+bmL`P8k}nr;oXKVr8nwr7$w|>CJ~8{LU00L^;22}>AKWYYEN+Y6)P^_ z3|4&k5t)N2be#Hf^lD=^k>nIVZ6jCt{>=n*4i9mnx%%N*(7OhaYa7~@RDSYBGJR#g zz;P1D>Z&AC$Xnka1C{W2f0^@DxxD{m42NP`aW~{vpPOn?AG66+YLY=ht~IOnLTyEE zY6Z3?F1abS;vT)IU5aM>H|1GsC3?ag8>9f=Mw+HPG$2bc{Ex@b$QB0Zw*OL&_%Q5j}aoM!Whmi`4Rw{o_MV9x))w^jv zu8j8+DQwwR+=Y<;X4y=}zwjN?MRA%awez6Hbt!gE^aCgAXX+Q~R{fVKBv7mFS5E@Vdjb82{MYqru+80@q0uSo@_Vy-j{pw7$NXN7_T*a^}r*&d>j(fD`JWg3@*bz@o z%GkkJ4|qB`*`gj$w|95yO2r8jjU~GdXNyw#4elKU$Cb*@ans;Df|`XWy1~(<3b-GS zKUD#*!9J;*D8)}zz+%Moa!eG$6)*v*r~+=luP8qXC)B$sANPz$D_|JqZQ8Yn70Hwu zJr|e;Tg0@{@2F>VT4~z+5-#A4a&>U|O5h3H%apKvKTZ}Tn8g70X}@}BTE+VJcWn4< z;Fy%XsO-SRKpZbZOD(EW z3s#EY!i8kzpJFTT-AqTA(x2krj%$PSI6X8tIf=$Hfj*F0U|H@;6s;e{@eNpft!}Lg z4NTa&=bT!6oMcyD_wB%h`aKs^w~pbn<3lWYboX`CV?txua1?>r4_vbkHcy6rA}6ek zTh<>TigP;{DHOp(Jb+gPexKB3TIL_RP6YcP-}_*1Nz^V6Fqn*c4q1Q- zqNwbH>K=H0{uiLb-p!+d(Vr+-2{*vGIw3fKvI)}Jt_h8y?%2qvauD`3b0F=t_ai~; zc(kc9?EW+qsKMF9`2>k?t)Pk2M=LmD^q_iW669KN_^m#Eo=m=0~ro<&o||I_qM3gL4f9($o_1gq6HSFB!8-m`AFj zp?vUK0NB?eq=>MwMbhc41zqT2)FK>Kv4-@jY)7;k*-sS*xw_JXWSnbLtS7FpX(`AG zC2O&bo?IKkK~ZAxJ>JHlN?BVu_sQY`wz-Z60-?(x!8Ou?`4(aEFUjZ-7IbcO#g z8qfd5UOA~x$Zkz(b4`z{mn5o}%*{L>g6-PrXnr&+LKU-DFrk>rNfJ}B@UWIvHI;4` z1!-!*F1!XedhjH?VKsX24znS~wx1X8Lbn?o?;7)4-p!kEJSMYurQU=^OnjP4Mr%H1 zsrp3x_opciZCbQ?=48{-5Q?u4A|nt?h720`N__|19ao-r^Ug?~HnA)b5g@W<7Z4_b zbXX|#vbT8p7~Pqh^&lNv8nRYl>_pBe`8qhwgywBTkg~#D+L7#oj`fti`!=Y5FH9W7 z3hqWPx78q_Vi^_c-At6yABHS67KjnBBQh3hakq$M>_0$5 zW%3f$BoTa_7(tBN5Chs2ZUo8AlgNHCp=1xmGL96Pn-jrSP9qOxx$n=I(F(3Yi0o)= zB_NVigNW7NdzmIVGq_R2w+A^sp5@(qp~+xt0_HCCOG8wJS+&p>+mih3!8x^hGCX0& ze%BPZu0J>C1H(^KDr0}9?@ZV=(laGHCv+96mP*yT?!{1QV6^%>L{26xpmzzWOqCWK zw@8k_X8!}p^dF5cKaJhAGzZ=4?k0R?oTobvb$PjW<77NBFGDon{}}Z!3Dt+3 zx_CxqxqFgI{()lQOr`!v)2D%Rpw=4dChsY|`ZjSXd?XvBeVD9yp$*%iTiyR7SguH0 zEX3UuYvW9g8|4n2Aa7VA?GKHLahHnjzJ-@AIWg-a`RhkrCdD@Rqpe}b^^3tF1wj4u z8__-e|6NI>uCfuadbS(C$HpHxAnG(uo5c7d5MD4%S&o^b9cl#yIZn7Hd22S}j{ayH z@hRLxajL$f1Qk!?3J16^<`a4g&p~>s#WVw%mNc4Xh&L_KsjnZm=b1cMQ2c*EA)@?2 zWaHSb_@BX3c34|=A3ayj!__?vb%X`+bRV+A@@*Q8JNm;0t?i<+51zc69*KlWi?`xV zJhL8mYVlAs=BLy)aS1HNP{)Vrm+q4o1l785+z)JNC6$iT0x1v7?HH{;+!QebvH8qS z_Fq4YGb$tdujkW!PvH^x?R5WbC+Ww;r60%X8$1+7e+?cAp+Did33r@ly#E}1zcf=T z_#TcVObr&4Q3Jq^+%}$tQk;!g=!ieKLF+y_2o_s$ECOb;QG4Ni#!IHS^+S>K)24B& zRPw6nkV~Zb6^-}s-k@S0J@0@gya>vEJMux(*n@`eDF=W~jK*c>&@w*Nui|~Hu6}rj z)UjE#=ohe~H>$Xi@+0$g(}d>?&SpeyB+~?2xCsr2&G)2Tw50(@T*&teJPbf&3ySV^ zeu^5vSm911KO8QlLgITn`Q!Uj+(GfAvuDo$NXx6NqWu_$9Vt21wH*?+EZo;DUtU92tZdGrh#5qnRG$8A=(v|gO>0FN6~S2 zoha2OilQ{fr|uP^AOnsSTOaTx+(%F+Iwl1$i9>fI{{+I@=smD++gPK!&5NuT^BtG{ z?Ojq^{7aBbhzD`c&t?pt8 zWoo{!UD$uqL-P%C^FAEk1w4}l-~9n5jl*<+gzT%?|BIY&Aj)6C(Tq@^Of-ESDDYhG zAWYyOT!nez-@1@pEB6=~mQsd%+y;Fot-XHLAXR7j716(^7?19(mN%HcCiTnYNHewa zdyInoA95cykhmB{J`m>ec=NDY{y6ec{2IiF4ve2jq*|#?QiDEH8z6n82CX;UhJyl1 zb&LBlt^8}WdF*25&Ihvv@zFLQT8HE~uEL`K=_iwOw1tR9io<7+P!AJte`5T>U3&qi zJ<^{N@Zzeub!v1SiM|TiX`7QkuA@}PX=HLFkC@aP+tHmsbhpoe32MI8_TSQSoDUEu zLUKI4QTtNw`47&H->F&@XSE8&h#xx4|k>u(j65J#4NK5&-M5fsTCqY+-eQ= z(mccG$!7AGEzs&(Y~bf}fjZV7`>%2DqxOoG$Nov3{!v^VJ4^cr>mNjkbtF!+7&Wrg zHX-G-yLs}Xm}Y3vJO>|=B{;c+Xftf5AIKk+;z$ozzADGb(g9+;U0~$1z&a8}C4FRZ z>V%YY?xWc|CM%Qb$Uqs^$wPXC_S2ER9b)BVqR*30^wpJKCennM$MlT`edCF~8y9rP zsV{r+9tFpgNK(fbq&{0m!ibRCN&c;(f{s-b9y)N*QD2%R(%uvcL2N2-7S9K<%~KZi z$MFt(@fzJV7)v^aIVRi6ekLZ^#WfX1aR*DJWUiv(;@*q0*jfy*2f)zR9rP`Z-&u6H z!JS0RvZ=U2zp(wjkI1MNzp{=*KYR%`uji+H40;}&ucc~a86s0PUt@|Nw(qy9OuwGe z!)RbZhDHAiFtLpCRjqFt1z4*Q``U1j;*q^%`&<|~38o=O&N}CyQ$!hLxACr1X@GXO z#P%A#u`PbDp@*VM`Ff92AHp_px~eTeqY&Pw=b-pN3Eh*&fO&uo!H-e)Gd^6S?^7I~ zl|C%4c^b!N;A9Ex;VXdt)w!G1cNQVxMG3!0b~KQntFk%C3bHwuL4LUOB3H7GPZvHQakPpAW~15(e2= zf}{i{(L4cD;oU}Dvi4?&eWmHJ;!h($ro#<9X!kb3WQvLQF}I|;Cw8c`;ZISeDgK#c z$tThoRa{@E|A6|sB~{#kGY6I+sc&or@^&E7coo67*tA;{)H`g#T0yfWldNhMt*Okw zqD|VqX?JGQT`JuTraOCcFC>j8OYskdyvR)BhXyLN)k-h<_93#<0F9S`h2Bj2H{-B5j$Nz%@5wq}#4dPe`eEe{z#jaW_SJ zo>FVMVZlnG=G#Qx3+GkqGLdgrZ(n)7`FcbGk3^Mz9xV_OuNX>UG5%@Cr(W_J%~vUb ziwMKU4usJ}JWUJIizjA&m+Ib5tdX#tjdVxCc7D>}+)w#8IO)wpjQJ*GHtUz~bY#By zFPJda4^5)ovF-a;wg(Rwji;bmc<=lTT8=SAn7tQe7NJagF-WlAlP=zz+(@k`A6K#$ zpDEf1)V8p$V1t_~Y}|&>~9E@hHq- zn&>yO*iJV4aCR%2%Wm=!X=$l4B!qRh_onh*#~C-0J`}vhn+>+R2QIu+8Lqq27xv+W z(=*1~u~HY?ZQRL>RE)^!R{JL_8Q$`@o>-L&vBtm%e={P_1n=(X$kegi$BdX2CJC3 z{ck)kk3)$r#F|9I+y}U^Bahn$lLE{b461tmc5oW01_lmPHXIsK7jns=JN&AJUbtHH z!`NM})`wo#oAcYhFO0MQSRZm6@6;>q+>IK?5wF!#akH5!EHXZDoGR^yE=8oS#DYmO zktwL&T$sqCH>qD{*H$@NN*}_+gvjuUo9K`e(R*Z(EeE@vk4{=J4FlnOM6TWUSgNHA z{TYqdg|(XaePxL8b-U<0VSgl@zVqEO^{(abi4 zdg9fK=DF!UDY{|r#ySP|&tvlucpv)MKag(Id|WXC$edFpZmu~G|K-NWOM5+p#&?U1 z=RQo7^alkEoDNcigU2r@qh5EUKfjsV3)VLdn;qX+c>R;&Uqm*$01I-RsgrzdsY>vD zQgMIqErchug_}ff)*7o4D8i$!>6CA~Rn5%;_c$2xfwnG|W{qNV6#s}w6k9ZkN>T1Z z6m|R0Flxg-a7%cg;-{njpcnB$|3ReI+^ht5ih2{yAWc(q$2xAZ!_RW2Idan!|34{{ zo9v9FHPiHABz6vmph$%g@F^eSF(< zqVzVOMx=L*NFMBEk3_o2gFr-Ue!&1?Bql__X!3#Ea5W^ z+@DD4!`K`a#a|`-2F4SyO9Dk*L~GunIHw>fZy0IgID4#Ij!tni9F-bRnT zJZHMNFOG(tBm$v}Wp73{ed)h>BWgSvJ*BBV+?V(^k~@I2bJcymja7WxMPGy&5A|f! zigZ)4c*s~W`PBrhK^}#8cj5mr$f*p!dyM-OJP*hJoA94>YYG0pivK(Dze9fkbK@OF z47+=K7NmA@Uqs$_p)I?1%&j(87hX%!ZoP2(_{smr_}0$jM;c_LJx1miXqMOI^4wr? z{T}7Q<(%soWpVw6Bu}#x#W^qa&Lcxe9M9?dro%&N(nFOkHbZ`FKv z^NmgOZQ+|#%n+cqRP^&@84dZ=yJ2&98ZgWvYQC56krrv?JMCR^8hC2HPk@G+B7VV< z4e-oA?_jTHMTnXcAqwxZXmg16G;Q=&`)E(+5{Xl-+S7mL8z4zU+SF9->EG~;U7eDl z=BG!8?raaM`A_Cssf?qN`5h?p>ggbl74Oz6Uj%J9o1k(F{Z6uKm1NJ= zNeFq8Z&J0&!+c{`7o@8TG7`?I(=r=!(nvc(S(x6sn0IM-1|;f_lK#l`l~~T1ib-9>_FYJHb@N?FaCb`@pAkw; z8lM^JimL6OMDMNA#Y35nMrFblygQ#*ua3_c+K8FN#an(Y$y)lRp;GUd=wUuFI91Z$dlQhDQ3Bir1}gq@BpkJyH8ry}v9@D0wHG#HYl z@%J03aw-G09ykAq`5~Uhm9Jkz0l6`Xr^|CX%%_;>Ll9}u{Gbm{!uuk9c#D2XA9|rp zvp%qkKt@~VWKdthWVDGQNeQjT_I<8TAn&;LYq#!7E* zA3;CTE7&ymzt7>vkM&5GP4Pd4N9kJG2#L5<`n!uUp3TQ@PApm*KtAwL zaDx*o7NRJ@`)%8RdCa_w!* zr;Kz+VbOmx$YyE28HIvU4mkNbanS4_a}FxrejNQqYx6KXYQd>9r9@}Gin9o4i)Flh zh}F+D>0Vr=Rb2N9sCB1eJWq=R`a8~OH_mmRYMt2A?i%E~aL>G-Yo1z2E_8|J=~^uF zPDI}9H-_%kJWm>8{r6wdOWdY;bmO@cBX@9X@y!qIp0ahiH|jUm|sk)5jD(&HhRr#*OMnVm%Ip{D9gM`&-?nOLE>` z6H$KJQ_;Tt$M(0Oat3NuDhe^$2klRBr8;(Mw}D?}T|%h0=9z9VGaFelhdzFf6rrE` z=XbCn9-{WOBuFg2yvX}ly$X?_*xg84E^H&E7q53sljK?rayuEnOf8gS7u_-vEhuv6 zJ{A%|OEqMPAnL*cJ07>5KF|-Hr+jtmC#{b9I~iQVGxg_A5)EbfkTgwa{e1)y*19Iq z{dgv?EKl3C;?I~fa<}k&*mbD?n`i?piqp#G>SH*T>tAFDhUx{#PRjkScR-zcXyxbW zH(4w1Z!mV%Um}J zZbGXf&G;%dM4?KO&UcSd8xAdw(;wJZIUZzrOy>rx_`iarG;jHf(0YhN@zbn>qfN`1 z>;4Yoj!Ejo41_M*flylcI}!Vul*)y8!rWxR5$y>|h=a1VC#I6}6&=^qk#tj_qy67v zz5nA$zC}IrU=LbcIozIxIWBN}f{G7DqfFRC{E-ib z6pjP57phkze8eHou{!`PpFuJZGj#`Ygzg z-prC$-_GCYXs-@nBWCCPrV)LAHS(+ebEo_o@-@UaRI6Ts?AY4pp(`bOf3acjmGy}M zyr|$0Xi&y?8X4aa%eWJJ71zFI@%ky80JZE2S%wy*o4EGK{o^pl3GN@Mzaeup!qGx) z?-Z4vZ+B;F!M(piZ~aHqk``<&lG57yqQPCWXczu2!tq(DeA{O9)8UO|u;a?Zd8nm@ zVv5!GUO%3l)b5((4v{;GDH5E^O!F@=9OXC+D{5)o!}0djn4F1jY=fvQ`Y+I0u%-yZ z=>%hxe?1D1w5&+~5a(~n^<=I`wW>aJ#w%?eN^L)W-`5N zf#x})@0>Ad{oKVM6hrI?vCXM*#4Z>`Us%BM%l4E89;Hz*xf@48DcYWAt3k2&Q&dUh z7+UkBL)g?_N&t1T-Z$p&7zSaAwqfG)V8=~s<2u@}ahOB+xuZdQ9Q7G*A81tzY(&CN zV-b{oo5IckX!Q1#GI9QD2>LR;&%OO#D6i!acFPWJlD=XT^X}agULP(ynpAU zB)ldzX4_WcL+bE}sN@QiNS5gyqvYSkN@kyh?Ng*YqXmuCswcHCZ!|J@W=M{p^xFufDDi8GBPmD*Yv{@B#&y8Ssp7B#z*rs8AU!wMTSshyu73H5tw>H zS96tCbz_I}(v9-6Yq`V>E^%>xDzTqYVp_Wr|6Bf-YgNt9w&%xgU~nU-yMjn(yY%EgM2)es}))s`Ft4Y%Zwbs!^mE4_ft&m_%n z(0rAJQp+AgUZM5z{ZE|zlH*0!JZ;(3XXp?+9EIIMAK9MY<~YFiT-=li6ZUJwTXx|j z_WKO4o8N<9d*e*H?T;kkR{IrJWK3U{e9DI0u0AnG)aus z>(Ox-1b+6M@hUnt?WYBI-6E-fA0SK?ZQ}2S)DQ6TiMn3*G@{p>oRJ&8C-SbaO=ULMJ0BL`x1P8I)#$ znC7YN`ycXeI@pgQt;)6%og()aZ2xl&eH6E5!h}rGs^f6#pD#D;3)z;O_Eu$AcWKMe zTkoGDW%AcQMzup4lrjUT0uVZ;dEUWu=%4b9mDFeN@vHIPK@JMl08Sf1i!^hs6;jO;OodCn|5^V zN2pfmK^dZt=r!gJoBLll!J`RMRki&n4J#@t{$s_8igmLt!si_&4>3o5e>NbEBQ$@`{M?c1JDa2gKgEM! z!D0;|#1f-7ojzAt16cF1e7a-r+%1sLlDyuwCAVCZSy!PoLPA+M0Rzj1KEZ9>VXL~F zq=r^MQv~P^Z|ucdAEsU`z6)X3jSYb;%wLn#$lMr=(4($Z@RqbI@oh|yK8j|!TPgx$ z@mn9DWkME>lT!Dy_z7BnLx>@t1Le%)RkF^~5le8gia-YL>jRhKnxJuVDu3s)D4z+kw1mz|qaAIXm3Du-(hB2B zyPZoblBH2{Ds4urG@Gl4c(eVev>ULJuCt;nvZ#T~7?#*cuAEEjomzsiXzqu~C^Lz! z8-2S`U2jL!d^FZMbe8R311zsgWVW@aDCf3%=Lg7=S3SLoEXj_baaG)$WNRJ^tAJ59 zG4l%;D4Gr!ilBx-I@P&2LLZr7IM{Ute{K$cY4x^RQ$=Bzgano#?< zBRf^oai{Tf^LmQtFRwzDDz{`5U-2pem(02-uI;iB+T$m_lmHEX=G25A$8io=Jlqgy z15s>_dWaNNvp@|68`TQUiu*Zgz=j`a0m-@jZ7=ajs*zTBW39ia3T026WccW z;EJ>`6@gv2uXz3+xN4l71U6G6Jifo+C8G4MjOVDl+o)gRMPuMH3-&3(<$~?X=3DIQ z_S5^7o9nJ8o2$IA_4)+-miBDm4;fK2WXm7wtE}4!L+xHJflldO>yyHHkQA0_uZpAn zDW-in(_VpV^EgD)XJdNud61fok_u1**W#Z3Q%`gSEWNRx3;lQW`ysnVqf5iC)wYPh zB0a=4C_i%A*hsuCp^+XwSBcMzaMkn@y|Amgq5#MK(GK5Q65eG?VYnmPAmn#Ll6~9q zFb2@;F>5RRgNVN=*LO`5HIs<~`hFo^l$WN$o-8T0Llb(SF~lU6W=L$J(L{b!&4I<- zMy|vRkKkUu7Gq+xlZxUGjAr5!G3r|4K00VD-Wd!EV;v#8XvjP8AjihiKma9izyl1pQUHjRub^Obx65lq!RJC{ zGI^tVcRF0g__Ulpc>rV|KmLjHho@;Px6o91?0hpZ2J_Qla3G!RC*+2AM=;DHbWIo3ZrgNoqbsqEj zO(>O9hq~}j%sVCzJ)VBZ&)3#vzGBRP`n@icP`s75VbFLfp1)4$nb(1y9v$g9^U(hT zJw4*+v2;R@oWG{?!Zxyq=xix`Hq`HfdTpS zx_t#bJCFOq)W86jHHte=Y9n{$)-1NPVux z1^XKM{n%e4rh6`mUz8oq>mw9R1!>4DbhFIOeKl;(^5$s5O)S&DFf^p zqOM)(LEh?f)wJ*iU$%Fx%)`Sc6s11$FX{ z7B0xUwCEiz@|Iz=07~9nZQN=3bf62h<=2oKn|l1}lQHv9Q-C{BoEfoS4OTcYpgFIc zT%~Y>zkD?!7`H9PZH}+)*Y1C655L9d6J%MTU*hDo9=^7;hl?w2@3K87dq?PUdYXx+&vQcb z3FSQaF}<@}J!eNNfjN)~Ehox#qvc3aU@|4wdNK$R*eg;lRfUea&5o=SCCds-E58h5 zeoUW3PSiLlq^mItuzo4DdW&9_9y=eD)+))dyY*_wLeHB^Ee?B_!miOnztkosP-|HB zYXojZ2XqMvp+!WLGrbzi2b=ZQF&6cU*b=TSRdR)#oNlHILs_3UFl+@?iVOpEMFTEICLgI6(=tj%rbuO#AZ3Pack~Yzas6O}!7yet!nXW2BN*0PaL|}s0~$W=}R(S{*a0OcQiEW*j-)fNm{bMdWlGT z8wj;cEVnLxEmRh1Z&c~&)K=;fzKCy6zcr$}rVKr$>B2_$bc%(n2gf}>e%xAyo;FP0b29*(q8IUse=MaV zYlAjR!YG_YR__Mz?ALrxk1@0rKwmPRa)+RARa|(OjF|k~3Q5`7L`*Hg9(=g@l;JEC zMr|0MHLw@x)UKe#uPub5VnWEBozxRLXA`N7=>VM-8j7U z&`K-F+{XNCF@U<@hlvc5Vw_EQI9;E`&C7id29E0=WD9Htgt^Nl2SXo60bGijo5tNL z$P=5!pdhNadyHH=*wYl5E9~i-m_4mFPVCxM+NnKVO>*Z?iO{8h9y_(C*VDN*F?;Iv zGgZw8p?zBU?~JO~%5NG91-~S+1Y?Z~HU5IzuG_DbKSt5O-DLsv$~nX^9&W!A0!2@* zmA^Of#r{t>@1i7hHw-D#Yr1ZcV>?&}{QAcNXP!*pa0TS3y} z?WV4|q;?g=Drp?|DOgoOqE{bF6XjHuYHqr^if*!Z@FE{{(tn_}MsCgb{sL6I#ht9K z$_36d8NT=F#3+jrcmO}@s)-11{xxn5_S{4PH1l`(jfmxm3WJ5_QHTijhs}}M|)=8)AXV4h`keINE1E)mn^-AlOc!67-XJ@3ZWyxcMEOcmRj2+ z+|XBVaJ3HBia&y0()Pl%%SciM{g6=x`X6dR*w{Id6|;e!wu*_Qlu5<4`g%NTdFe@r zL3J^AniQ|=mxwQJp*;+=#Q?6@NBF^pgKe7U^Xu4Lz_!-1ZABU5$t1@)P+nL&L2O2Q zGh;4ce-E;Ce$dC`2h6t&HoT4M8AD;}Xubspx$xV^;oxvQ4Ipl$0YpIyF7$;SJ74%Q z!n*#%1yoOuF$HaIOsfp0X_eojAa1^~_8alvW=P|zx~oO`u_06+@<_Ud^25vJdK9hv zool6T&c(|Rt$ZVK4C&m-PrF9Rr;`l6vX` zNt?(-&j4I+9YDSMHR>t&Z~VSXcFuP6SDag~daU|Fjs6~mO;pdhKMV0 z9%AE5TKi)=#%P7i4B08Zft3#?^%w8Y4ZAYZKelt`F2e`ZY5r-|pr_*IpUnKZKSSx+ zpSxN1R{97~27m4#e0ChJ^SM?Y8i^_(KLW&eK~IO+eYEnHxX|yoak?%N>#jhN5OI>2 z39spM;gKZDhJZs7ua^9M)ZLUnX)o|ShRIh%n4_&_3$pbk*aqxq!P?1{X|;VZXY=kmn3To`ej)2;`yClk)o56^EX6;($Pqk5d6x4^+;A) zo>^Q&lqAD9DBh*``6yX7bFeC1@&6XGr1X_7>~|+aLl=JhQ3tB!^Ioen-@@Eu1(A>H z(}Q1ld*5b=~F183RiG zm`pM!CkJswWOqTi>(8<-yPzVXB4h$40TB{{7=8_kI>ST>;6flszPGB+nM?rh-upcF zd!Fy}kxZX+x~r?JtE;Q4tE=TQ>I3;*?wcqg_VwtFz*3S;f;&;G>fVnA2Ik?VK6y-C z%w3YVEASZJ(x~Z;Cc!~@8Xo;`_5h>sdIa(-FYpE8zi9qpc&7bkU0lKe$)Zeso3@n) z;cDrr;8s(DyXK-F{D{3mWBy&z);hTkuB^to27fn0I;=YhC@>ra;z9-dWr&{%>-JvW zcGxjn8dEK8#js=-86J?~>qYh#8VXH|jy}%8?y)j{%Ov;(SRu$Y51cyzFE~}H+)|0& z!KYh0Kec0+0l4ftcVISjuW@y_k^)#kClB7NR9>nR1!6l3T#uHNmR{P055kv2_jT6k zBi6$ZI2O#X=ztznImd;9#|Y?!e!$0WN_w1T6b?LW76={1F#ojDKM`2-y?wFmka%|50(Y;ouT+EKQQI(_sp% zHeE%2(tP_f_4f*|{{gN3`%(WSt$wZx_1~pzc!B$}D_Zf&h6e7jvkR^TW}pCJD{ZW7 zpze|#Z9j)(IDI?)&$Q!P(FkG!A6*k>mF`++!(xk`m9S}(yhB|+a!JU42+{M%KlUc| z1)@J(WPeberxbeJEPE*xL@YciARq<)F_AoC!|M;TkIz)MY*FET9245Vr)hBkiYTwp z2U-i1pk=igEM#D}2UZJ_hUM!5^P`4Oorcc=;G+n95U*_s1791?KN^lJbp1#f8!MMp zqbf~xyEp-Lv*PAIg(S^I0eZEC^1vptM=jfXwCk)q?rH4oXb0#*`lv-PF$OI>2we9d zJmHEb4om}dbm5f z$aKpBHrWU#cb*vrOl-DHYB8o-*gkgD%1ckszEd?PN6{sH)(LG_wr{c%;i~GsURMggh?1##luKTkfZV7I@0xT{OKp$Zu>)W-Q+H@-_1q z`-ES{DVgzlws-kW0{nvUrl-5mVvtH3fwsHQYM^Hup11LHEI-HL`CWdF=jQ}GzlLXJ zf(7!UFR%eCiHNm~rT?@8!z|N=7WPvn@PTe%7b40&{)%G+&g+#4vA$!GU`yRV45$YG zyPP3G6sH5VUB14AueF&eG``STeExwuHgmZAHYY%~2GBP!F-&KOe-?a=55)1%6jJbs z#&@Uu)ZDZCD49uFa%PgJs>q!Bejgd}M|C+$#Sgp#H~h>*!V<#tWeMLq<)J3Ou2Uxu zPd$b61`~#(1>NMV;Si(GQ&w_EMlU^jA5n+(p>wYB$$wxR@qdC!Q`_X!S&0V*fb}FDqD^P&~yx?bBcNqN6 z{8n;)pQz=3@IU8|rThc5{Dc2<{&>oNGDS4t!qb=GL;9O0b9l+yhjh5f=G4=LG0G^5 z^uB2>&UO@ULGfTu(&*IUqZ+7n0F_)7Qq4O37rMaf&G4*%XH`boDojHO+#kZgt_JU ztC-ywf6=+>Qa5&;e@0*Ip-vl~+6$`UNf17K{=Kq3@VALhmAr}tD&hLpyb!L!-#|ZK z6YP!W+H~6FPE^&U&Ce)_=tMGY9)W{V=~EDi`hl zNE=;HLN`#CVj>#xv{_QgPA$EUgAVswW~ZjjlS;{3siJs)Den8Ma{USw#N&m(+Y=lP z^cH^_ys=Py+-y%rVGkvP3e7Ei5KjyBr-JeHT27m*D;$I*sRF)-$%h3|Zd`+5NuXEI zOYBvMc{3aF^tJt^&CoYOPBvuJ!EKssfWjRS8}#L^f7-?Fo$INt?LFAHv%M7sxLWL- z-r@rDhCwd9C-Kuy3LNdWN+}+L#yWKZkil zZmguz269DlU(t-~^kz&0KLGO{eic4TNIWUMpKX(~*Gli>34vYTpTd7%s-nc*-)|e~&4HWO-YdiZ3 z?X!0F7WR^Q00Uf=f^B5@!AYLQXe{2~k`H(myDTH};|u016BDQ}pR6dpb20a2f1L=E zA7di)@_XSL1)ik~&77l^u?gr*g?$V4cKdJ5(^>N-(T}+MHRM?}2wUO*xgWQkrxu3% zDMbIlUc5mmxz7f<0SjfT^1*}>Vf!E_My7`{b~s-cyFuPG1>a~r@b@*{4ep|$&}V)? zdvQg5k=am~pshcV0ls3S1_F6f91Q***o@B@@vwQ(*OV99P+}NAT_yiQ=o!c#zvyeM zNw8#JQq0u|`-HUd3_^(*>3(J6%a{dZ8fH$ ztX`7#gFHMu8Xw}}f#A7e!y|7y96RAU!H%5`k3!!83Upr5TRV0rH3rqy784=pKX*}* zp@{Z`{NK_xhaC|>J`&l4u3r|JyCYbGOFB-Ts^gLAbt5(_r}gP}DM51*#aXC_5m=QFXce^ci( zF}HtB=W{oDUeWoCi=zyFFFl9WP*==n+`c59q#jb9S(vt9o_IdTx@A?7LDg^3nBt_hkyO(@a;jsf}MhQ zFHj+yMm57ItQP(ah(Ms}Go*jSYYNi(5rkeZHg_O|4Vg(|*vN!Vo~&V&rWUW#7C1|u zBxH_X4VjxYWR8=0uLYQ}-LE@g@}mnn0fmAlL~a8jVdFu_R~THe8bO>r>S$M-=WL;C z0;2RRdWzA^RkO|VIUg>OIM>i|?#qvet=*R*rHNl|X{BU4BK4e+&z<|yc=p^;tli|W z^Xt;aVRWe9R8eYNj7E4P-QP+TrOBMmFuJ!zjGl=7MSEiXgfJ?Gy+sjbBqy5;vMuG!%|9lUAwQhN1j@r9`QrlETgWv=G$-qT&+ zRXC%J-ZRD9>WkZZ&L2jpt;Ox#^34R`OmN^*dh=>=JC#2q%Ae^{zUnKJ`Jgvu6fUI4 zm1m0~hsn-LRr zHuT8b?6l)LY}Dx*2HPzC-U0~uLn+%=K3o!2y5)M6CefZsgW=B?RH*mw8?p_>9iEdLD(Q{{yAX=z4v;427ugk}Y9J;QLDLRHt| zle@#{iU;iM`b}Ws;ydj7C}N_$9^0}2W3LPR6`48#=PV~uA+l?rg5O)q<`bj>?cqs! zphGV@3V}zo2P(!U{8^}`5|cJrYk$H&dM017{YZa}f0xG-6!JKSkRdT?_ir__&s<9h zAWMd#A@V7~8PN{ER9Xc{*!=KPP`=YrZt;V4M1~l9^VUyE>31E+W$fsgiYH-&?lwb!?!p1^GzGF7XJzE-5CwVB2qg0WIzZ5ywM^DqMPD_K)nO5(Ij9M

q;tWXc~qfnKU=*Q3Z$gz69fb|U!TK#NT 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�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�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%0D`Z}q7q`pGx2&vDIdWO_TNnL=o^{3xQ%1de| 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 literal 4509204 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%0DK*@n5eU>9KTKh>_yh!2I9 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¬{F-n<@H} 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%0DSuEwj)n;)hVa@~JHSrpKVy{$BWa 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

-edH%$}8@n{qR=q@=0DxJ*~v4X@m?9be#VOr+Htg_ssjfa^WD;@Kgog zQVtf~&Hw75@c+cx`Cj~E{s-oM?6$pgKep~Gb0zOlel=+uB-ip>!Sj`-Ok@^dDC0Sz z^3v!1;xDzIEuA>}OmE!#R=OEJwy0dPR4H*x%{p4TGx9C9$=I@nPj{=|8o$iAy%!!e zjL)=BeH(KpFMlU%Nu$K#+Uzx4x!b$)%A;N*w#5W_y>7cMBKuXV_tw8fPMNSbY7c#A zObIS`iS|sq<=;Yc(4uIrmsrH23+?0UEx*dpq@}?GG$+5c3en5pOz$N3JpDnJhX;0h z#|Dmi#|I;^Sm-PT~S^wq8+{AEX?YoKVl$r5l zkHd$5uNU(#VBCM%t1x4siuji|2IE0KIifE+2DG+n8XV%l;?4`(>OS~S&XPR-)#1-#;gBKl`?0 zwQ56tepmcU#c*N{v~AexGj|%^hppPRS9WQ|6_fuYvfOugFAcpv!h2ch{eixpn)L%y z4*qj{GSWw_P2a=`TK|gxzWm%B#QAXb8ThnzEq_bJ)FifrO&#kv2!S9 z)C1^KYfOE!C6Bav%LZ*8kMuFYLtWCxr3VO}TtPn+t;1XSqzyf6Ww8Ft{7E|!ySz%^ zQ~WQ3JIO4fTfUV`kJESd4#u>fPjU=vU$5GGPIuL+?9a0M^NKyY*dm0iM;rdX^mjkbP!gV=(Q{DV-McBT)RtE^NqI9#TV~69n|)S!)9o|moqko%w!B*?ugsQL z-nfgnR$a9DUU0t2>!%#reEJ8ZFAvH*t@i7gGEYC!Cwk^R1V_T=xjU5Sj!>SgeHI*F z(6iuhS8{yl=!Vd@z%OO!2jaT}$Q6P!SOXe*RNq8Ptc{wrp2v!4NoA_Pcg@W0!LKE6 z|4_fDzm05*|Cou#_T2lO{UfD3y5LbUY(X)9I%Ow4@Ah?^cOknPbQi2~U0azP`_&q3 zA_GeAE;}w3Woy8p#^EshY8m6@cJo~C6K@TAEmeG8<4+OTRLexeY2vn6o4?4}lxgcq zP#5vxmuNIr+Nd$jh$o*^=p4I}X=f$v4HY3fEm{ z>r5rb{__EB2U~soKa^&}X0MH_wULWD+o`jIf95O$%WLZuU+Kz}Y;DsQX#65CI(+q0 z-a^Vtxwh$!Y~x*-$jgf@^3UO2`KR0bbvDLRSrEHv`VtG@gOoRo@(Soj?Vi$q3B=i9-bH6OKJM8Yyz-{DTrP{8CLO1vxqq(G_SRhc zjO>)ghk5~P?6X)?+Y#uS;3zUROrFfe-|tBg?`BSQ zaP|g1G$tlZW?dZH06OBQ>)IPU(%)S2%_XI|+})qXCJCJK>uyfu{LH$9)G3UI#t|eK=ItA_Gg3k z$6WidgddJLS?$~6 zd(yLRi4?^5cI!(n#)w&8`n1-T+D4OO|Grh_xJ&lXWbSAC-Frwry0vJp#}39^J^U}y zx7usD&Of(~`M(7i+b`o=Iq<*ZD^Na&lo_?h0fEwKx5l z3vQJ!jg=R+GA;$b=7sv~#ior_OR8DJ0v6z{bY<(luzFgJzALTzNN`(UiE^!DC38RA zt?zze4R+dqv-I^z%@Ebqas9zp(n;m&0v>{uRSP{+_Pikb4fiQQy>O>ceoqu{X!iifd0E&Sul5 zkEl%r{d1P|q7|KYbOr4KFY+Zya97;5a{5MlMkB7@1-mZ3MOCN!&b#r23%wiMxpzY! zHwk9)SX~YJT0}mxmdQ8SM&i=jq@STbl=0p|{k7zYu;yAvyo6fTfM;{Bf&TNfN0D9{ zKZf`N_*5aMz(>9S&Qf7~sjnQa3@w+i-|i~n;a$QxT3wWhZ-r#~!5S|%h|fhBccy&$ z`|&^@GP;`4*?xjNXWODQx+t$+vRuYz{Q~`s_Jm`jR)FhL=&s$`(q_Xq!v8h)^uNQ( zfHf*pmt@gkPvnoDGWyD}7f0t&UD~UbGXJf9C_h9aqcZQy{yTw(Shdn>?CM)sj#d8{ zpLz6A+on8!22WMSo{Ig#2al{hXicCx?&FI*{vQp<1v<;93OJ+k@fN)CD04G(Yx*0X zPE+6RoQ>@WFR^8+FXB=B;C$$UeF@h{PE{S)_0(S-9^-`fc;$#a+5Vc@qsJ302VF}p6( zB)*@$*lTfoIX|x;lc(QMqB9MM!?6Eqea~KH_;$Ie-@aQ}dgYQtMD1@;dD!E%ugB~G z6W%FfkNTSVJ*M#jeYBcAjqIlwiV_o+wAq_UpM(~WM+UgN{Gun}7FzVlE1oJHd8OJ9 z+%c=ei*L1NXQ_PbjoL5Ce!SnKY}qT?*W~Oa4846HS|MO5>h&H~q3PHw-K)*TfWOJW%GbS+qT7 zZ3EKP^*-YV+K)iH+PlShgts*aPl7o-hWK8c zqAYjiX*4v(+&|q7KIgM<=E?V){oICsh2zy7YwYQrc9n@)*ZVH~z2!IXarqj2dloX2 z_Gugas&SOD-8Fw%a_sO6(h*!8;?cCVDLKCG=3p%<(qw!}bGsi^JGDQUcoQqw16+#U zU8eRl`rs?~od)_qx`oz-%lTi+Rg)z>eKZ?f)j`*8pF!2cegtpC)vbGxpLYM+^B4=j zgnw0CGWW!bY6Jar0=-Rk7WPk}FQdPS-W5Y0{U!#zNA!(%tpUaEUG2s6e(ySOnteaV z)v5jr`0>-{+jbsRJKTReu2!gB8h?!86nVXY`MmJ0 zQbYuMpJXF5&xhwS{sr`|HC6T*86P*TwPSw?%@02Hl}YZS4~#!&yerX@9Q*P4+V{-5 ze*t}AKd4ealC~V##5{wes=!8&7)g#jd(`GzuKJyS3294_0m`st#91TK6|4baM^QR= zNzSLdwS6_%p8Db0cT?9e^X6ja{^9Rcq^~b;Z>(k<@lJo1>N_x%rq72r43l;v&s8No zeJ$7k_s}l-TlurS(CJVAwW9Y+o$ZYY4oL7 zGvzh*4f)OR_h4R*15a396J44S5j_S&X?tP~dOm?QM8IRC^BN>bhl66Qs4!irdz)O&I8zap5 z$h+7LOC>jFwPu3cohbn>VDs^H^U-(u_CgQDOWm*p`kn7}4$kxz4KBeRN`BTnWvg2@ zs5KSjb#U4aZaYZJy3&u#en9yC7WjpsGibaLJJ)R9Q-SZx|2#uE8p9o;WBb33_hrHV zU+Dib|9tR#y|G7j3RacR6&Ih=dJJidZIU|8`9suMm%Wv~Jx}LbM9ujYDKF{`@b2@S zIpOc!f8n${8u>hP+#>3TWv`^&&Cosk#mea|w!cIB;dK7(#C|wvtXk_=CJz18KQe1+ z$=vh5);?Co+k?R2Wi%!?vHr%snh*^IG?oNE&=mh`1w-h+Xugy=us|m;b+!Bm`uZ;R z={$WUY@14pVJV=m0H%tRH!+?Kt+96Qd{T;OO7tWhY7&3dFdw!2un|6bkn=yHd7AZ+ z?H&Kj-o*3mrmtQ4cG7P~o;d7anho92AG6_?om`6?ZPxP+t)-wf*=+J{aQ`hI9rk1N zUrQkSLK~vng!rNM8bG^o(TjXPeZH&C>?QK=ZEZLE4)7ftoarSfLwj4z{GDFS-pq)x zgSSvlO*&@E5if7C-zNbJ&!Uy*jwy%tI%`r5TQcTj7MX1-?KEd5At zCp^D`J^ljxb{aXW@CITE1^c4?N0df+ zvic5Rfe(4vCTu>8-Nq5teHLJcn(npTKFho2_UYb-Z+qVR$m*xyRg18dMX{NYmj55N z?;p`S@=%MP7BAcROTP*nEHY~+i4B{LjL||rYkzQHkI+1*`K=JvGv~KO1#Jm<&t&!p zVoQtHC38o4+Of4me3W?1cRu0pu;aPUjmmBry$kw? zWtrOoIlQC?*}=`(t)_pX@MB~@bi=qW-5FUw=&Q^uwFg{Pt8C3L$f^ ztR;KdGm=Uw`BnqG>R0)+>>Sz;TLjOnUwKL5yHi2sDcm87)vNNf#(KpfI|LrE* z??y*S=6?M((IsQIWnn5Fs@6w%sm%1v@n+x`d3lzNvr@Rw#h7Y~@A7JpC+~(XW8lZq8v2N(MQFAR`j~D!dZD$T<4vFK`A|d@cTbYw_n>d(><6SIIuI;~I^%^iBB8(HF_wi3?RPZ8c|< z5$kRTen&&916aH(pxMOTFPnHj;^T}Dc>2q&JV)$v6VFlm%)WShV4A&i*gIXtd^Dmu zG$(yq^G=cfYF?k!dOo&g`M)%dnEBKA86|UDj|O%QYGv8%%2YMTmfqwdR>i8o0jz_hZyfnQ9ef6h0L*TTRei5Deo#@n^AMK$}LiWku zvNz~`-N~`<-^BWKf&I$z9wT1`woH?DC21Q-8_TRoh{qk)enR@Mf1#I;pWTy>zaIQs zlv%5@0K9r)V!zkKyAHm$UpagZ?)ZMFV7 z9sW6UulPDV+5h`z8vj{)kS6v5tG^A7nQsi9f66-bm!H5kcI#rn@ zR_X0}PF2T5{J&~_cUQ;i0@-~_<4pX)k>8WKht~!3S>(W#S#Jb-6c1=>+#IP~)px&a zR`Bi~vtL^OHq7+4p!00IbF;Sq5H4{GHA|@xI~Y*i*O4evho2aA|dK+|Bur=mP=W{mpl5 z8_F8z<4fqksqtk+~`dh{bUv`FM}t{q%ExprZrM&E&lNZ*<79r5AUR);EnHm+8#jxf9qKDYKy9PpUG^n=5qOS}Gd48Cmk1fTna@si_;v5=;OygcKRQ-Fegfm4`-0AzWZqofx9I~1Gd17u zVJx-u9cE0;@FEwjV*FHj$1~slafR_)kN)C9>{Cq}7Ga;h72XAoB!3!xYQ%ek8Pntb z3yS@rw&+TZe}VHXpOsHF{$bx;(>Pj8-=6R0x5uV9|3&M4;tkAW20qO@v@fN4lH;F$ z!Ny65BSR?`g;_I0?kUZ#GBQgm`e3JY$-$Xk``{9zGfIv%@G-VD?%UiuWiR4eyUHd{ zihmt^TgEq)v7F}>`03rDd0FF9@u|Y&QvG4}iU4aGe|wd*@#F)(_5=901;rq`aW5x=W7h?M3dt3_gckf^U`NGJJ7(9`?qu-vs-E zW#7SWYvgR~5u_V%>8QV-au29He6PB(dAa_vz%S7GIcCjX09 zCm37OJyeG|uTOfP+gF6#CjYlm=({5R^!TFW_@Cb`++~K@4>ElE1aWrCgnwWd5zHz_ zc&5$Xz&lMl6wgUzmt*%bIO2bqaDvWON}8D99>AY4l(&rUIvZ87Yz%Dtm#;!O=gF9J zaZK6dwRzZg74=P7_!!!6>|2Z+;ah3SgFdiNXl@kkWfiNYXzz&V&z$!JT^ibh4#PZw zvA$Kj-;V(=^Fp?Uz38HK=1JMQpz*{YHX#0&^R3mivBc;Daq4Vxa6(72zcleJ5&AZp zZwbD&gud1BtwlT{z2*|;#qpz-Z*=0v-sErg62aQUtVD8b_tn-8Ij*+qQlG+iE3%iM zqjj-Pa25JT#Ei|R!I{9i#A{)Ex8~E&fQD|w7lSrQ7l9AVh7Z)K-|6pq^0v{&cJg+R zS2jA)!gKKTARZ9w&x)PsFKymK-4(VSHulS`<;k(p%@)Q^$G=5q(j8zraBO|Xf_(x?r*CK5-;iE58NTKXQSM5?Y3BI} z+fa4N^YZ-_#)ZDC{b%BSo}2&cL%5F{eusaL?EY=5k=0%wzD;`K*yr(0pG3~6vw7|z zC!>JxW7P>@TNe1+E*`HcZ<4i< ztwBFr@-Y1Ey;?t^4tIX6N4a&>Vf+-_c$&cDneDamnxRSIu7C$1rzB6c+`;!K{42sU z`yZNGY&%*wzx|}`(|Y00j|Jm{vERuWN5B5TYZO1s$ONIbvd<%5j@B)A>)U zJYS8;hijkGQRa5}R=f5U%XNZ9m++_d71OnmwO2JRx9w2cg)lZQ2lfg1lRU0$ z-EIEX5FVPs|9>BRNM;uPlc%n_Q0=lfH?;2B$3N39R|jzK594D>dNFh4l|6ztvCECm znXHdJnib8_#xj)&Pm|1Ic<^L2^BU!w7(>V)cKlZ}{vVxLRQ~b*b@|N=+r=X%;IAG? zj&0v<%kLEYray=sBOOY*HZrT^)H1#6zZo|s_Dl5v@~*LYC;B()ov6CXYmwgpI#}Xt zu&TVX;-k4CkUR7EzUT;bzS-8_7$vVMu{v#euQ&G1@~6;Eg_CF7g@@YTK8Qr&*T-q}fFLdRwr9BsmueJ8#< z&k<|#IYY0tDlfh&mka!*a_7qj3!jow?QPLsEB(h-EI(iQx0L!-$Z_~PgvYb~DV@6< z4v_;3;{LgL*!6e%w#nzp?8SdlVb(Brx%h(@o=A@U(}fMyCYI&ee1ESiqEFrh!vy|j z%ubFy@=KdB+B7}r^M-2ZZ>iZsUFRcrXOX#$?2X(#$a%~IZwTTY4KVkxN2821 z)qE>g8{HW##bf-n+xN%yMeQpC&N;t-`z~xF-?ZPOeKoXC`v~M$T{lJh>R)gBisu8- zfA-=(>a=aM{Hv-iIkrvf4=WsfLuYyYughS>L%}{{Hv>C{f4!` z6T-W}cj}#a`Gd7T-<7Sq(ugL{Cf_`ce_Rp##&(pQTR&6?{{_JCkDIMs_a&8Y$5I8f zp!1oE2I;=_bGk$Ds3_u-`7?&GR#6EnNQ_(eD&v z-|QJ?&kSoeM~&`@Y@>bW@lkAGxqsLxJTZ@LhYv^(lup=|ok>4ZXYXg&KmQrdvEuCV z-Vbrd*Nikxy_~V0PL>mg2N{<5^l8o@G5%}A(8)&p&KAA3NBj2u8|#M@Z{LqXL;i8? z?OG{&zTi#lAbvK@5bkw}7NDUf|9RSp4OaWcptTd^jR!cx7xDR$Z#FFT((!~~KRs$} zf9PWJ2s_buil zuT{R8Z<^nGyl_6R98HdGeL?nQ+Pqd}6wqsPF};otk$$&L-)Yh#ZzB6@pQ`+Hv{qk= z{iJN*D(na)#8yt=?{W$Dgf7-dWiu&}9|!RRy7-69AvykuYn4W2=`w8ukHX<(ZJY{! zwtdd-WckTEnE$uB`M*`=pS^vrY)_8;-BC*el}e9%7Sr8bf^RC=l;-U4)h##p&&zA? zNKhZ+-_YFafe$_K@8%c5S74ubJ@7qlWfRe$6GSK21DLXl7Y*{Dw=dd{Vs@`QZxR(2}vGC&zDG$J)8} zI4IVVeCRoiqmVZBAR4m0lT-VUSN*}ihHNTxV@|6IPWuz%h*k{tWnA3|Ft z@umMJy`*D`_FH;8)kFHtq4YIsukyg#G^R~C4i~yRd`(8{`Y(82yT2|sdx)vS_E&}U zzt_=UFYR&lI~*m)9zLRa-DP#n6zyOi+rRu#lmGTVX54z>d8z(t*7}cZR{ONpPk)se zUXZ?A^IgsVrJr2=d3joEA6hd|j1ATaM7u>Y^+>=2-V^WuD-SkSgX6BZ!UrCn&iv=} z=wLoB;%`CP-@ya^hVy+QX8hasmvg3)p-*sJtvOF?@g{x$GyCIR&uk^nL*V>a-~C>X zrRjmor?H+(LtI;QS9}6XL!FYlljDnxyiK{SeRJ>&y3<>(SPI~=9QnF*fHek<0rNbA zHB9m+$FKXf*{d*q-7opqT~I!GEZ)mAkNv7AePIc6F6YDE11#01+=R;8u-N#IYmce% z52wtVjlTo_UX05(>i+q_Y$4-e>^J`(&M#1+2 zdd<^w-i9%W{YCaytCxj&UqCgpUfNdyRkG`eWw~_WhLpCLQ*f z!zv@+ezmd47lz-4pQvA)t<2cTnrH3L^Lw+eyL?M>?7>4yKV^GOy0J9rwkn;w828v; zP29j*+xCEeYy9A+CwrdZ=Zp>UW0!_}<=SKF((qoP7{5y6%GO=LPe*eh+wN7r_&w9+CTN;O7PO zl5dtz0Z(laJhP{QNA}Fg)@uyESo*HJ)JJB1XI_YRy>SKOcebn3j$y6agzfcKUV6c- z(}iKbY}!lJ&nW1^rJt@q?K500V!*jhpb8P&?ga z#`mP_O_$ad!Q)Yv_ULP_oC2QT93o9Y|66!`vz~;V;C~NK%}^mc=b`)GzvVUHLEpdM zcWu?(!ZT{|)AoAcd3^HqL*J|)_STrWG?Aab-oO~R-|R<3rm2~N9moEoa}>`95`HLvU%<(%&X8>C^H9vg^Rh z;=A#IJ&G>N*<5*hqx>P35Z@!~b+A_4Nt#8ZNj0#>p3Hsu2f{Vw)ceTMKK5PcTk-GO zi1XG#oVRx3yme-0vcF`$+0PVbKMnqoW=+QM2xQacdo$fd{r;`*anV_veT#=7(e>IlwR9NVn*t`+*P`KR}$8+wd>0neBujsW(r zoQWeanGT}yIO%$r);F4G4q3iz>8F%2Fk`*SX-|iGw|lu2hQD}9Q(!#anJZ+E?0e)&Whzb z>)-Gz}Wr7@#1qB;#dF;2kij(mQPV3rBvBj|~zF62DS>|E{1`=~i*w*$AQ z^m&}`btB(6hjuG#>H6P$*@r5y14g$_k9pYt_Cx#27+b0M$T_s*njdK2rJ+l{8UNCe zsJ=g9b(2b^l`n6c@9}=~@9w}y*5s=)|FN$H|6|H~tK>f6!`ZMLPQo&t(I3>GRz8=% zcAEGcPEJ=poBovj_{xiF3hl4ckcT$S4D3^pTH&amKhLngK7TMdw$a(Y0)98$>$H7Z zD_9XSVuk(pjUy`8U3nVV#kz-2`$o7%Wfy$)X2D_VANGb_daD~&fbW!KdEp1TS#0rL zX}+Tu8oYIxfAjM=SDs}S=Uu{S+oh5Z;AzD2Fnek1{V!b<(A+N4LOa4SFy?)6)Rtfz z<=6L9`TeJp*ep$d?9QFkIk9ex<&KmNxc<0n=Boj}Yrb&6jxD1f$Gc+40>fXk>rsXF zeDS*y@HC-++wpZgL7pWxkNlJ15LM_DRI--IvOI?NcHWKMSTlapb?_zL9nca8}UiM%`%f#=`- zDs^_MeB_n&qFeBSPeLAd#&215OGZ)M6LVwC(sxNIxKfb$yO9d4zEo=u*fir%wJ&p%|& zq{`c)b*@WfpMzER%lf=`%-H>m|>NRC6_Pb#wI$+>WqEh)3?&M(}mN zJ%UXv66em^a-@!X757^172K=2vql)HLE4{pkhYh!J%Y#T zw^4Yx;V(fN`2N^mUQe11X#6gt=UUm-@E6V>1fOw#@jJE{onnN2El)(3ZCD*$?k|n5 zz$UoZ{4?_?bu5i`^KF6Z6J8|G7=DspD<~YFQ;iqD`Rxx{UZH(w?W!w0&XeN{R|fch z)lZIn?QW$x8?FV9<6p(R-teyGx5ta>>n^G-MUAmiRYs84yy|O&(7yZ#y0s2 z|JQY2VC<)gq11xiT|6hvy^?q7buNFEuV#w>d6Q;^7F0Az(M@K4Xcb! z7{r(({&?mq$eH*^7vSO4=SN*zbcdz_{Ux;LG5p`khk4mB)bCageyi(uD?hxfet(_z zv7f5{ojhlC+dC8C`p@kDo%H{>`1Tb2Z~nKOS?-|ge`CLfA1xo)gb)8N6D!Z0qXvJj z6wVDlvN8&KPOb26Xk{a^b*!XEIQPjXdolf6nx0l7zkoB>E^_00is1;4Ew%Ht@%xqv zJFYB#Upn#n@q74;`jcY=N6wDl$9BZ~UsfGc;Me>gD{dF%u2s3y*_^mPc)we0}`^vInI3~rf<^iW~60agm!}#5mYV9+iv&b^qy)}%V-ghT^ z*i&B-pPoBmd`mV(>ijpbM_{e`j<_G_$y&SfiJxTl2YTiD*5*G4F8-4VZj|#qes1>| z2LI|hM!(88yT>s2Rz-fT0h&FA(Bb|x-vx)o+YWSj&c&ABPp&%*pI-$mfxZyGXb*61 ziu%d%#*Nm8xgUSM*g%>!_GWz5c&2^EZ`hTgJk;xDS({AX_|A%^pYhzw+TUXG;J*>y z``rWS8RuUstDzWBKu7Y}POCNRHic zLV0yfX^%5$pJg57j!~CZcW8GwOuNqBCVfbo6YOiGWF z+jq_WknEf{1vU?OQ815=jfe54wm~0(em!CDu=DAmgL(W}T`D=Y-spj@O&W{X>m`rb zdHT28rSJJSORj4BT4qzF%D4Z1hfe_Uu6y59qjJR;?S7L7-Q1+PC2Vgn{45x6!G8I| z{Z|9jYh>VHF8`+!@&4Z~0>*2Q+lK_>Jma78#umv%33!LaK^19cSwFf0`Y*u88T$Ia zjU~r!f5GMxDa!w@4V|zxi_cP4K16^LSG5k8;L) z1u@hrv!6C)Xs>0yZvJbJm-L5npYPe3_{*`+3mD?~-AWhn2Invqd-20!?DD;pJ30}u zr%XJCe|t|u^%U?ZMiKTF`Kt!|(e_>&jF;R{fa~8bOOD;PlPb)3q2G;6>ikD0rDxX9 zisjp2@9lY=rXP`Og0lY`d-rWi1V6BLs*Wl8&(i)g=-{`#*QT#c=AKzt(5@TL>&)Ys zb|K3eIt3s3^|ndjl}`hHCPtpsnPx>aIxpj~r|}J2EbLZidjTD2-2>2R0e_eRe%s!s z(S_FCLZ0<%tFDfFycta%{+{;)GHA!6_;ucmzs<$p?}0Y!Zlt^?N0-K`Eb$w5`5ZLw*a@@elQ?S0-1wU0D)-S!N{ChsEG&QfGs6SD^1;v?%y zej|QG!T)l*=T*Ka75A+3UJ`tHdY)vjwf-CarGMz4PTvX13w|O0`iI%^{ulNo$G&=pXox+_HOW&=OSBhV zFeFcX_?O(-FIsyKmeZi~vEp`qX@+l|o5knw>Q3jsHbIH(rZ;s05eJ*ud|FPe|bHDN|_*&-2z{$iu zGyDHX_56R7|1Ff^iN^t#+gBFsC)&(8R#rx~uvbDq31BDoQ6M`CJ`-OGJ9w*i!$UUR zo)FAiUI)x}{27=p1*QW2KQ;VoPW><8SIpVG{E~-1a;=G1sJ1nZ(k|9MlBYiUqKQRv zs!jIBTD4bvPJ8_0T`#aUz2*zdpNI6_UC`fa@AnVrFW^r))5-0dhp$2FT7#%!jig&~ zQi+GsVqh45|MT(r?D_S)2=Pl=Hn4WOVLmY)H=DCr6icpCd5sVA2)=&f?|)R|U2Aj7 zZ^~`{%}U@bA#H*_$2LFyBJd6vetNd?G70~eeItAEv?Bli6Y&3j_`mT-eo#0uG@<=P z>t1XB#tGIQ``!MR70Rp2_)z1&of##DDSl)sk3MQc9xJ!wC?Q!z^Id^nhcBbQiGWzh zyWkT!cgM=)c-^hc}XMQz1Io5aml=95$ z!pE=h#p!#SEn~KWS$w97{Z_R9MCJ+hvJ4|{&`$9P@S^VyFY!t7LRxT8Hi4JNu&rJ3 zS(TwWG8?P42P_S}m+3uJcB}v8nB=K~@(XZ2dD(AvWve{!oiefld&)$2@va{nb}@sK zW2IbI~mZ|4f(tlKPIp9e=G}Z zwTbsg4{Y>JKNjdGcKx*9cjfHz4F7NR#ZygLYX1&be}O%^Nd6D<>_-O6{F*##mB+{@ zf&L>|(a>5zXa5CV`X(bf^mI}3gAX^Vl|=9T_y%O7E$dr3FgPq%`I;Y@55MF0p5CT9L%Q(8jxGd4F^t9do^<{YKBs^$ zJLhz;|1sa+#|rI#%y-~VdTMz8nY9P(+f!VBax8s><`~@Reg*O$dT?FZ)A{T_JH2q} zcTdZXMZ5bI8)wN<*3+&E{9YF><%|fPnL|>xpHj(Fb#JC_$$iRGfgcL~wW0VG<{clB z5ibf9$&=!xcq1VzGlcC6T+8yFTxk_=kZ0`$v-K+R9_xvXR)6>u6X+{elN0R`q_~G z%}b4nWq2}JpL)g319txTIrG4mHiIv7mMFLg=D7*JYt!w8=YHu{(si?@ShDuQU&JhZ zgw}B$Xp8qhfDg%+^VC&EBbyq;SW!~a^7Q_1EdcH zyy%z6MXNq*eH4bY?C)o4$t~WxTnja2Q-jL1`PM-SjXN_%b zIJc#7guNQn4Xu^%-|SmYc>(=R)Ln5(b;pMV-@9G=Yg~Lq%{SEjHr1V2om=bj+qyn$ z>)Iyz#b&(R;%0qvtmi29h+}4d$;*|Gh_}%P%#V=+3t1OT&nGt4#l*_SuW;~6Gv6O{ zW$P}y85oEe9Pg)Za{K3_ubX+p;;=mV@;k0EdgBaF=ciy7zVt%9t6yb<&|a_PsTWR} z^z3n!{Q=(DB0fCuPQ%X@$)B`=3LDUG6r<4c=x|*3nvUjA&BfO7>SewcVI4+$q|T*p z%ea@)=6c!8vE3{F?5KZ_X-lxa037~Lkh$PV#G|fCzFgTWSnwg$8vP!nwQ^iXho6tP z*_w}|i7ZXJL_SVt@Ls2QobiMgF|juTdApkat)v-we%rD7oVk1}C0!IhRh{EqnO=JS zGuUZLI=Z|owa3cm42yJEgtJ2~dBnm+d(hd&ZoQhkwVcsx<|Aa8vVqC~ugRA$yk322 z%0?EA&*a=4*}*i{L;FMw{|x)zY5a%$@6am;g0cTQH}>ru|5L{P7qNc@anD?v3gq1h zK49%%PrwJhi2ZBAKTb5iw(4h&9~k*Eumx|1A8dvnd~rVMSGe*+e4$g{3V6ft&)^Mz zxZBcQF>k2tv%G=6ssdN}I$hbi2jk-C_T<siDeC_!aKDJM zvBP&amq&uV_t7%uCt`BFINJ9Fad$SU>_~Sb{3zuGIL{29RDFxA-VnhrB>{Xf`KMSo z19>3#_@fqg)!8{Ojyk)9{HQYb1~9A4zMo=8qaOIvgYewg{5x|ejV;r}O#OEg50-z5 zmo2+&izq^UKi@lY;n1;=a~Ka* z{JSZ6>Rq>3x%okj4PpT_@vYa!x-)*B$y0wahce8Z6@qWUr10V6RiCgy$e)E_^Zq8#Cm{Pm10 zU;HwwI3?EB<@P)(ox7ZVGnxEp_~z38UZ(LpF$SJ(N{-#~SFZGMtZ{hY>D38)ZlcLckOQZFcMvcFj?W>5H7py+T84v~f zUtWI9>su4Ll*$jr<152@4!y5;@50a2{#7p+{V%c0tp^>dPL6e7YvTIU?;ryp3v#A(*IE((~FFx5($P@ow$wtML8c{b zm5Bi)PgS8i%)GGh+xtIj=Sju<=lqNR>i473W!5LGT(W(Ds}pbY7w7kDRr*ns4bSfB z>eZgEzqr~@lb5ms=(hF zd3|=+-&yfyfMdYcW7h2)zc;!{Zu|8O)!{Ym|LPB~hhme6+x7?hk$KlVfgGnZx!6ll zc{k7aGu&}4cl_lm*Y!P@*EtRE1l{7dO5bB-vGGcCz65C(yR^*BN3wI6!-IWY^4am( z3+#hu-}2_N!HZ3N;4<|K&nFE%Iv;n}@8gxFs!#N`Yj^HYk*#lF?$5lK|MnA=0X`xp zlczrPQ1a9ty_h`pj%+-YKxbP#-Txy0`zV9G1k4Fd;P05lpW-?xR(C#DCI2f!vASpa zA3I@u33d0E2JujphP@Y&@Hg6f61p+5Z=8)rc4m{tu07M2+patk#2;v+&Q$0k?}^Nz zXhq*D^!9tSDqOtFpAi&@WE%GrkFZ$FBhU6#4`h^KFy zA#h?tvtkJ64$((tSN@JT$d!ua{q{$ZNpu!xHP3&`b2ZNio;UNHaPVgQ?TQbyLU0LJ z%+p%SXia$m99d-DsvEr)>CtIoz>$ARKCk4%;oK46I>Gk^`fhLx9tJ2+?~NnS&{A)l z|FhITen~XF;eKyCjJpm0WN=?)(vOlpkH_4D*in7xrCU7f+t5W=cN2_;KS@5p{*?~N z_p)osc4g)J5x?sBBbF9Q>C=s^(NE()Bf9C#nmK26A)diabzPocz5o@xl} z4Z|fXCG!)r!j9*ItQ)>%{^cdWLH+aZELk*fo)_zT^m`}b*MIMX)d{vYF7;yS*S?*| zs`5t}uY8ZOw-H0cjOFon&ar%=+P@(;PWwy4__6$O{kJG8sAk z(nC`U9FgffhA7vMvEW_`%txd#K?@}T6tu?;((KO!6{pZHksQt$ExYz6TnUP*kE zHG5=r$wArk7_+ZNVgnbluVHbdY2dj?VsJ6%0LnHm+8#4s2CR2703_`hbt;g*F1BYOJZRh znm*Z~vqoRJ*6xp7>n|dmqh0ni^6!sqo7;p-hr>ereKJL!<(4+vg7n)CC&xbR_AgZ$ zdqDqpYoMEHhCW#@2-5xNLDCHxJq!P}wa_8u$gVd#3(Uyh-kf=o8~nB^IA3|W zz71aHb;q0kdp7SYEPOqbv%r=Ok9o(1mgbt&cKcoN9SlE(N7Pt;nm_x1I?D_A=|sL- z^6jzh%lmMfwK*@4Zz-=WnS1D2@s9A^2swEHZoSzWS3dM2S_|ftSGP5C{+0NP#ujT4 z<0;R`r}_Pslj$ybc?Q4NqB$m5|G4m%+XSoAR~kntvui(g!ex&F+g4~if-JE%IsWDb zW7E738W{WJPX67c`u*NtZUe_94b`RIXmr+!c!@WLeNX$YUW!ZZz7d{O!ZT?H=X&)A zW^g9uTod=Z8$6vPZ9i#G+PSlI!xM~CV%2SUl5f7zb>f@1ncc@>iQ$e>=9t(t@>5d>^}4*WX&5>^1bazr)_um9=Tb9{zvO-~Ovy^|(to zFzug0f6LQ@^H+e6yEUBl(hKTU&|urA$Y&O%&C-xG)V7Y=9E z{{KC2wp8~24sbDvf6=$V)6(ntUoTvti^;D_qF%$t z-TY+gjZkjherW2SusK=yRR5A^NvHi2PJc4C2`e}6^wYoC0z6KK3hYhH3y%Im@JNRo zHh5^B44x&Df734gS>Rbfx(=2jA2Dl7JA|)n6Yx`0!fh=4bhG>pBSdIJp7bd z>tNU2;CI5VV*MAsrMbOG@A||cn_m5|_$yj}j$8UWn@$;tk5G@(DV;ojDgizWKQ5@p z>6QAYD=fc-`7vWJ%Geum>H3H(*TomV=E;Dd+eeaN) zW0PZ_$nye~W%ANTsg0%BhDz0Mr5zimeKMetlb1qo%PsFM)DKO}5C2mCR_ZO*4@2X? z{$FPCR`dD$OdV5>7tzCYJI>vK9=d}wre(|W&E9xyiDH11L)r{UZ!|UeKy^MLQo~zEb&+1{` zUABGeB^!nLlYwyu@%x9(oV9&&xEJ4K{e*@?aIY_bdnaoP6L5EjWiXpJ$)`4=G*)_%$}#;7qQ+`rga`($mdOKN$HohhMeRAw^M|8* z4E!6>`Cume@(j#+PXzCN=X1-tp7o+3+Bde8Ku+0LnH*d6X8dj+R$g5}`J)@vAC$lB z^VQXg^Lu7B^JqZ6B4wN!a#5zA}AN9`JPBjKz%+d~WfFFZ2hmbpGJ3 zeBn!W`eg3@S;ikbfQj>Y@Db-3UQ-Q^N%-@zrCxw7)Se}3VuH_LpNM?81DX%=@NDz6 zkf%xK))(cefR~rhFYghiAmOM~wj+QXME-Tf2Y*%r?4l(7gDBgvGtgBtKJ{S_|_@=kNsZn_>#Yi zbJ^V<#>GF@zOPEPKUnYjao)!TdU0hkcb8pFd2a63niF%QksqqaU#9%Qw<7-(;FxUw z4&hSkS;oc)Z5$A;TfIBX`akcZfljsu+y0_QCeiIieBifoo|Q*NhCo1&shVtY0Z2kc`=}! z*rQsz)}BsqTE2FMIa9eBo7evIjLL6WpQvj78QF&K+bGklIdC_=Ox$a1UzfPP4(Ks= z82?w^4(NU-{rb_TNN@A+q)$KkDDSbtaj<2Z zp$T(lWc2uDo4j|Z-&sG#rW|czUh}Sd%EVB4X^I#s#5?hpbMn~f1LYz?l*AnC*S+Ir$xu9E?+(i-2qL! z@lQq5jxOxCkLp|B=ECoyUCQfl=`%Z{oWli;L-+RI!s37W-aws7yJ3gMTO{o-e!5=Y z{Ai@94qIvO#gX#CCi5>9`q!!cAbnftTf%-LrbxaFo$aY~HTp)GZH!y(U8XPp>G}b+ZIcM4=2a2y*m9F!*2#Gz8?~f z%pNeyYcmUYZ~KwqyMoEi52-8qrirgRpPEILhD&for={a34f4wm;1 z^Zh&ad)}th5a~KaEsr#%-v0JD{wDZbwKYUo^UY%0fSyuamG~OYdO*C5Z!LUlO6DH?T6U(_ zhF?dE@Fm|4d{q*}i;NR5vXxko?aAEd{=T8w?3q(cnR?|n_{4t^nRkuOp=_wud|nyD zmqcf$R&Yk8^Nl|5yR%)Kjva2Z(dQ)_xb|);;BR$-E&H(p$=m~qzb&6oJ6}I` zEIIa(h1TaRZyyT!0{->NOU6EI`TwFoKHc<7?Ax)X$C;Nu$sR)=Tj_!Wo$&{D1m`_A zGe|!8)}8^rCCAU1W$IqS*z4bsU|-@x@e%&h-)4Tuz3pbvHT?TP-k&Tl;{>u5C=Kit zvL)K~QHB@d-!|U&w@)T>_ci2YA!~cYXYQErGpRpFhINmwN0%jE`P~b)ja3#`waHg< zzt$ME-%Bl=lb(%{eC6d)!Rap3AJh*$1m~~$Q9leX=>vJ|KJ>q_kGv?l;ahJjd|73P zhX-p2-qwa$k#^ay2j{X+Ecjj$Z;m9gvp!SKccaJfZ>!(@nHYIW_+H9)tvQtNeFfjk zR93^R+!4Na56+FIg(LMP{B6=b$`1afL_n9CH&e~frj-}tUd-%OH)pIQFcd`0zVTMp z{St#Swa@jd#-C8@2<+3UfkuM;ZO}pTl~=ywuR=e`O5fXI;oYJ8tZ^6*VDekAvYVpMo@-c6qnXAQbojy*j_OeUS7QWbnZeW+p9 z>EnDav){|(&ACqAWjl$ucB(zPOnbxox$x@`(fdfiPqxRBuZ*ped@8w(xxm^(wpa4~ z7RmMSC3Aj7groCou&&hnrv9^bm)};3hy^-hC^#-5V z((InSzZ{@%`@om_R=#`C;{%*QP^NKj`~ds^c~t-L4}4W;6X@BM+qaQ^8Af+ue+T{> zwCA@^nSK);-S|5CZ8iN*x}e{Fdq+H>wsEE<-x&LO_~kD`*>kAhl-mbgm^I>E>6{ZnUhthHBd)1|SI=XX<#4-;SP%hsM)s2_}^=bop!*4VjoWk5H-dyaYE zqYpo!xtuk}>iGR$w8QiMIE@LZcV^_z(sR!18D5O+(97P7SAO@ZU=xi|R)a08wl%us z*UGOp1mon9Gt%`n+StADm9U^52gX(Ay;QnJG_eHj}J}3%&qP-|P0f{-r|j1?~CXO7|@I zZJHj^l)LYK|My1pj6ZRO#)qB5+`2(o@}<$Igr5zE;p2=6mFwC~-t}(1nlhqF=Pm=U z!*Ba2%($+KS>8Vk_>j%pw;D2h5d!C@Dr}mL1 z<-YgreCj|UJw3Ib|BLkBjQ!DoABbK=vo2re((m^Se97qM(CAYK$xQa=jPp{YF<$y!i)aKd+^q5x;-m7Nuo8 z#s-j!BunwH3Er^L>Qnd+Qx^TGej36TCg}5hz`noRv@77#v8JEVj~X}4OJ-B<;Rcnv zci$oZ=gbur_B{WaiXP#Mg4NL03J)CZs}bCJc)PwoYU&itXfJaAJ~MXcTf-lS@nG6O zJInZoE=#*idzR>&=3uU#g!iV@M&<{de_`v&ul?g&6SKC$a?KgS0pod3GMB!^;%IyJ z5_~j*^RRy$_F@(E7k-=Wf0gtsjg7EuoXl-X>04e0 zvp7uVHrAT@N`m!{#Kzoqc8+IeZ}<0lkW%D zd)GVMs1K4a?Yu>0q`S_QO)eBS*sFH=cW%yYE8_p{qOsQKpPF?k&6h@g_lcDj?R+Ts z*Ev)9wNF~KHkbR{9CO5`z3}~~4Bz+va>9O_XW8n4>JGcUvYpFMS`Z|C0b zx!(xJu&cLt&hYQuyU732Q%6iackNA~m&W1`^qcu3-D70Rnkmw>Di3MQ_{x+#DLflq z6u@Zgt)@MEUrt*LA5i;vU*Yl^+yLtw>J{8`=XtR?xu6|$FXH_hmIr-;e0S_!dF9gn z&Q&+v+hgFpcW+N-+LQUYG2Yd`T;H31M%ux>{;E&i8^{I9yLWF|JPjSo!0q3&w_jt= z|MRB~_HEs}mhWwP=iaU|&cGAp2{%nS@H2`$L0R$t=wA!20$3=|l{IO8(E#l-=qaz!!K6vU9We8KjoNd8Qv7PK9gWGHql%vsHd*;?sOH zIMvwF7&G|>_O2Cf&9lX;@YlF=O{u=+@lP4h@z#7g*Iz~b?81ar@3$SmCKd`1U z{vT^d}il}gKivK zT(z3~(D`e$e;;k@r2WfH`hbQwr#zq`Q)Z|?g%dOOG=Kgd`m?xg%xMMthvw4OzIWWX zMQxrpFW^gR7yW&}?+NHcW5>YP_0)b--o1MdVk^O4dha2{2=i}!YG3%f>2Lc@v@qu) zX!ujen9xyt@0y;5(lu+va~i4{+lotNX>CGQ-Fp}wnwRfPpZD(#_;#h6L(Dne{es`X zd*Ksqt*|=;ujw~8AM|}aXy-uh6N_lyF&{x(b?13FW$By0)BHcKf8fi^lPNElkNw3@ zEHd&1GK;?XjGI;W|BYz_^Xyj5v5zvJIzM>L&%5U5_DM!9nq%cRdQ9^n_J#Vs`=cvc zqfHM;hGUP0lf%o?oY_{N_(I+MtcmNv{Cn-q8=f<^aWmh{OS~x|9Qggaw)$O9bjomPF{>b>h`(c;AW^y^LitH9~d<9E5Sge=qzUKRf!w(6=4Mz5s} z`@b!mvQM106zCuRG<-|0W}n@qUMzbPz8d&~VKZ2Uy=wVjm$zav`RQ@Vv&gZMq2@gd zF1towl02K!uE$^M+qtt${!;Rr8rbdi4;;nUdTN~1gxYIxBKmf1 z(_LfN;B4cLZih?cP3`|onY@~N8B^e~!ky1Ux_qBAUfWIV2>A#YeD7#dIiY$h^*%tl z4U4?ghO}qaCVX2TW7+fx|2qZ8Kovf%{X0yb2?ldc_|-oO>?w9FDf!aTan}ZezmPs8 zocaCV9(OXhOXqh5vX<&opTnb~aUUDOh0NU}eCzteHnr3FZBWOM@|yA^xzV3w|3BK^ z1}x6%%o{(?Kq9e3Cly`Xk~k>c5=BF7x}5|}21Gk?a7$XOL@^G6U0kt?iYsm>;h8XP ziPFAgp<6UOpV%IK&qc`B z_$c;e9JO*tf9Ia(V(im!{$8u->}}84JV%e~?1G-!2Qc>(0sL0BJI29wXp1(ecIJu9 z&T3z~@{8>_Z?+0>oU>mWa0VylZq_#6%I`m87pUfI!q=8Y%TWgF3^?>Os5qXk7EBx8 zv(TnLq!)YIn|caWH{$JJ0+U&Q@u341*M<)g~}uQye3BGFv@@{sELuQ$hw6XO&4 zi9OB5A|K$zE4b55=9fUDz3sWKSB|Q>#NhFK%*WMZUal_a`QmMaMO>(-UfHB_UwIBX z#Zq;^rJnUOg7?uO+znT##>YOP)WPReHonPW8XufzF+x4{GV1ST)ZfdfKi&gm+O;2< z;zP=Zwp7G86VGq?q^27^WjF4|*!h_VXi2sO=9m8FDAqf`=9}K%ycZ67ZulYkmfR_S z5BBW9pS|p;3a@+Xx%SY+YY(s_f_`ndL5_h`qF~KP+qz@VwUeiE&(*}?ZP3fPq!+X;_7~<1vhJQG|MVFo(*8yh6VrK#Go~9o zZQTC~J(Gp)K5Xv4M0%~jgTF5o zUgwLRHoX_$=3K9~8`@~=P}j*CtJu>qyYX2^z7c1~o)+EAbQuGz!~Tfa&$d$jF|UU6 z(4QXUyU|JP(=mVLC09u1&ZR0y- zGc@tAQ^ z$vEoP*wcN26LdM_X+uk$#eUkI+DD2$XuujO%=5E8XophXU3?VV3j7Lp-U^v^@H&_B zg7%aP9Is}79Q0hb3O=MI_+418R(>(8K99bJ{u$-<%~$2M^Rt(e-YW*s-fY;kINyl+ z;pRcEFDkCXS;l?SfCD&OO zej4*ryk`LZgNaw~lKD22N4WSdOL$#bh4lpgdxtY8wepw#a8{PzP9#DTKhyj7JY3%( zZKxCH$I&+`@&R)(Tk7FEQ_1jwlmgfYOG#sB;?M@sTL|NQEor3vz9OtV zWtEqAEqnX&b`!VkA8}^0=kn&Vg_qZL{Nk{`W5Z$pqH|FvPpG}ocG&gL0JkTUTK_Zb z>kOm6e?iesmvj7C=N%hrSg(hX|CoMnLR}p0u(784OCIX~18c*>OYvLM@j~6w4!h2e z_k4{r&mRQ7ue?UxN}Tcj%Z@?G-`nxRapXVF`~^CH-ny+npibsD)W@wl%M&$CoALskk^_GD4DS5J+-%a; zU>Nv@rT?am)?*4c&Za-3+(o{3h1ic8&tV&7>2nBMI36fJ0e)bv1LHjfJlgEvJta0e z`X9&Fj`bR$i6<+-)25*3%9SP_>pf2p7e4GSgbv{D=&0f9WPb;JPdF&sjGt>jV>a{g zTa(X?fBZ$2Tsy%$q-W1)Vi)zi=(lf8TTjr+F)-WnH3{%A@%Dw%PdxUc8oTkwr^r)# z0DB<$i@38Gi47%%=p*r0+3^E``ju9I&& zERtSmc1Z(Zcm>5o#A2s@K+8oAL!@Y2+!6ikoX^e<(Q5a+6hPEe{xSR<1rWL<=F|a z&2nW=Mt>qURX;x|VIJ}ev_eLPcgi=qE*Q`84Ew2$FTajHWq7x}ZFrY|9D0Oh4?sp^ zS-%7AK7Z9@e%Xjp1(mRUE4SoHJ3LS3vGw}dZDXNR#SgJfu-tW*J%aLnBsv=M8#nFg z8OoWq3&YCcnY1Uiv#IvpYSJ+74xp{q*kVV2`d-L&4aO3+)In%-GLAxA9pdT{4!{Pk z8ij5cjjD2tDFP#~Db57y7M$^g7n}(@$z0A~>iAK-%b97&^D6i*YicG{&H}U> z%OAUY=V93RNnTnq_NxkdO5cWkAa)0AG9UQ{xuXr`tjTe{-HUv3&K~U(KytUf8%Ej_G7wND*vi0O2^X^q>vxA^Qoj>CuKFZ+BmKUcH^f)^o1=-{oX?D;oM(de%d-l- zsAriIwPV}i$KGLcO;A#o#kP<0ojmhD4|>37saMa{^UT_4f8%66Y~qiBZ>M0>nR`y# zXIP^@4wO#dnNZ5g#^c5NA^f8DtztY&bU1+Dkud(D9{i|tfn9rtto>h5TZwf@l~`A6 z&HGAO6#Fq?PX|4VqYgfn&xKFZ6h0QtKsoE))f#}P$J30bjo|Q9;pxWHhi9t}597BK zWo7xd4CX;@lk?p=j%SXEJ&W{mytn9hp4AoB@3cv4^}CJtpnmVeJNGuQY@WYj;OxVD zk&fqnELneoJk$KG=zlzHr#Ra)*WdX0g3zf;8(5!|In?I_>(0G@6E=^3nT>w+cKF(t ztD5DPh^>*uez#(?r}?TprIw9=-vLLSaW;*wwi4&oM!Z*b?EZLO&~w#lM}|Gcz^Nc5 zP4=B)ER>6NerRJ?Y5#{cY2V~&D?^zsna_9fTzMDMXb+h*X@BzlmG>|{tQ=hU>+HGZ z{tDPfr+@k1^zUFSP{K0I_t+oR&G8oC--G=Jw)=bfcc8DUD9`LSmm!hs&_k!k=4gCY z`%zHPb9E2-*g5=9)&3t16-OS_wpMKWNwkqR^3~Wd;)_C<`8nrq(|3ZfZtG%Cat@wl zA+45a%nLkVZ~ar9yDa82>2~bN9KHj$J(2qzKG=_LpD^$^k3-+*qwC<4eV*&}CuBbp z`jFD;{D8e8{J8Qqw5OWT=>xx~p26>bpbo>3iE^yD43Hnu<*F*W4r}|@z`wN|ee(j< zhBch+J*&-K`yyV37@E}yUaVrg$2kJ=5`2NO`%Nab;9Ya@5PHHmK{leRZL zIf!S(8xMM}m_^+9!2j#x9x?E^S#&twDK}HHhyHtzvR~2z-ogi1@}whIR}^Y_@S@+~ zzB=)@IB6xzlD$E+vJ?6lfF==TR2ZCsf*=o9_P+! z%RhtetJNg6;I|!53=fKyy;A-7-LAts@vC*xrXVuJ!iX@Bqn|c~5wCULrdGUbowtd4 zPV2l))N@+rZQ@=yt@Ab=z`H5`7~Zwc+cb%Ht@HZ5c+YiU^%o^|UgHfl{#ZZGx1Eo6 zuJ#hAG<8zo)XC*%kT1zQ=11Mmad>WF?{<=R-GHV0G3chV`whddIEpa5A|J`C5j+R* zFnkz~p-pVV6x?H>Qw2}yIo6Jr@{SKRZ0cBMw{(Cum^+tpj+lXgDZ6`qlNw5w13knIoc688>?@Kt@p z@9%NGUx<6a5((myv=L`mOU!h)y{PTPLB{j3lWX17Seef`2g?2g&e!|3hxabq=Ptu#<7&NDp%Uhl(ceJT3k|y??h8Ipr3%b6mN=Xx$*WYn( zy_<$Q^IaGOnul{{I&*VRjMg4%#;1&2(x8f4VC&~4-(47&z z2W<)W7THg1YU=FUG}8G{zw9#+oH1VHndh>{a~$%Gw!rw#H8*}z47$e^#4 zeH7cwvnlhfua7!w91^e<6XQ8?v~%&JhbH#jSq|`J)r65*$(viz|Z)^IQ;E-#9!;{0QmyFjXmpJ|9pu#hq0J)0Y2+9 ztu{{0)esM|6GQtHqSP5jH9&`)JmkUApkhFyeD`yw{1J<;7mU8pPuaPL*%R z`r>wD{}R&d@Sv~Pyi@lO2Ka)#I{i|w;3f5^t3Cbvms+RhZ+u<1ADQQSyvvm1w5Pru z42z6U9NrIG2zKtQgF?s8F*e+TeG?7ne`5V@_O>U2=vUuBy^7BiG9doa5&Vu}4Z|pX zZqU02_c-&_w9g!U6I2MuNL&r%m~eAu}h^|Syo9@~^-Z|lSQiN$k4PZ&PA zCeS1PUeFVG@p+Z|BK(wN3xuw!gRp^McLW?8&}yar5IxY}=Oh2L?bv4{Y}%T}+o?m~ z!F4U*Wh>wo!8i99;L17{;z-;$)<)Vm@ZetDYNT_`PXyr_glq9lgTWQ^+d=f7)#yKK zFwb2}TQpLIecQTDU_(8iaoS5f1lL%f^z|m37|Dr4&W;QIu%pcG>Z0z{@vy}ph@)WC)9ZH3H0;-l~9*Ys*?-O z3{EVtH^I;NRprCj#Ded*>$M>jr%V9%Zs6Vvc^L;y^mpz}U5~?diFs9?!}CY;7`bA( ze02YQ{Pm+~+mI)bE7~`D49)R#XyU~I@_{$au>WV9N-jP2#J^zWqv-2Ykyqf^8au(Rw)4?_gKKa3?fT0I< zOMn=*~}k(2pcqjts) zi|zVfiSXrY7r@~*_IoTZdKtdGbbJZUa96MFN8k50eIf-9VC`D@E2GXHUGmkAq8=MK z7A$z2-|f5fm1?}-2!EaE74&C*@&xl_ygSI(@pbg!f9vpsWBapsGI6kv<;pi~Ln%Bn z^=5vVmrrWg$d8#X_g8+0b6?IpxksU&+1SoGBIqtXM}EaKTE6oA>o8|wW889TzMNkK z-RcECQ}f+3^shKSj^9}LW*70{_XY=9JBc>QJO&5kTP*$l0QU6U?(}7tGt&FjzJ0`w zJ<9XHvymV3_gBm(e9iu#jKja4c-VvtRqClIU`W|`P;8(bZ`U^g@|8RaUdqcN(><`PTLHs>D z9|U-`Kv((rz4S|{OM3`-#2yvf-Ui&OkOp6Pp8oEq%*)4a5ICQ#_%ZAfmg8AC%|Ali z@%=F5-wWD?9oy6@AzciYL6-s7W=)gOAmvs72Zt_)PSC6AY6XnPG+lEwU9&V@MUX@I zIg20DbTxynY2#&0U%94F#yr5Ud5S*y{#D{2cr?r=yz4Z5%_#dJlg3}CyxH4jj2U}W z#!2Xx{r2V_TgC}@=y3w>+<;!|?TmsSNSCz($kVy!(OR=!#Q4+AIF3V>*2>=W7|iZ_$td@c%+15HQf6(muqEMM>zjI3_j%h*IHpY zk8IGw+{3Otln1se)-mxh?I~3sVI3!Yfg?$K-LzNonr(}HoS{|c9W`ag=X;#C@0wRP zZ8Pal$GUkpeYB;8XN~bDJJvlSbpYD{?|b>qu?As-rXcf4UnREmw|1Jm&Up1(NgG{< zcQGCHQ)=+#uM6I8JNB*J%rh;WFsOH8-A9;4p0Uvg&r-&^{7&fOSXAG~>7s4Wz;edB zkHGiyzhVYwJN8J@9%TPQ8pXE~`{p6$vHKsHlyQNBLs-IE9~zq;`8)!jJ{FwIB=R%e z_r&`~v-6Gx!Qd@XeV)tnV0d*1O@mCZ6x) z%+D#NSLyU-)&tU8c=sggOWK=R_n9i+NqN@o&0Svs8*>BF*1FKA&XV;nkRO}no5$3t z9ecRcZglEOlJl`0!NqgvoZT#(N<64|c!?o&PxY%A`RdYPw z*(f$(cHnta|6gwkoyvNM?LMexCw-w7yzraJ{^ak;=+E_=$3` zPe{(?Mj17=;p82uRmnS2J7wI0@aivx)#{tr{~_-Zxg&L)^8;U6t^34M$Z>(eul8@} z(`T9t`^TMmNRtly3vR-E|4j?M%c5&6?@f1O?jJavBRW z2XOOm-h#Cm3iNy*ehNdw0;?4DLA*@*Y_4fB>Cxp@zFr?&pueAsbdO2zxm4vMPZ4nP zMb}xy_8O}sqHf5Gs9W;Z`aXVPAgauF=gsill9aMPJ3}77&Qqk}`;jNhzz01+;(+?_ z0te?lw0_)=fU&5~zY_VA^nkBY&NYw?e0#lt*RT+0ilI(f*3El_PqiI;P|x#G&tK&n zWUlySD1Y4F!nTMsuie-!_9xpD+I;{zO>7qEu!jO$%$ccQ$67#jkF+`N3yO7#UU1|* z3ug>lHD#y+T@QJo#NQocn=k6oY003j^K6f1ZeK{BUYnX>fytjdUQeZd6BQvx+p?OgEyVNDI zhXpq&4`G9o!3T7}2Kz=H@MzGmMaDsY0JM9c2a55|GbrgBEx^0pk7Jz#s?v7(i*j(D zPHkx@(eyTKXxegrPW;M4?|v}q;Ace$PtMT5S-<8iY2gX)L;dsdqy;c<)G%|v*DUEn zM&VI^|Q_g3fo!It~|IKz2qAB zTB6x#&)C;W{{?L~_*?2|-|fF+w9ekvIYJ*x=bp~J_FFPut+#VjL9|hMqnBa67c*WM zyV>}r6;BvXbL1RVa}Rts#y_((0AG0_*4s2-O%CiW_+;uPRb6rC*H!i;e2io8jlx&c zin+yRq=nCP*A<`nVI6!mb;aN6BnY6 zY}83i>_qrpk=}(dQa9j=jTxB*pX&7&wD%O^T*L;tS-cG)V}Kc(_9|AD?1KKM&9-{bW8vY#0~JovBI*HJ$} z2h*RO&2r5{eMjA5KaY7){5pCs=Epbn{3e;+7+Zokmrb@_Y%;q)8o)UV*^(D^tNqqt zdt0{EY6h=bKxdeK=e3^+hx75o^u|NYCiwsWi(^vs(BpH?<} zT8ig=gc9d2CVt#IL0s&Z4Li0|>@jOgQ^q(kyBGBq0ZfN?&_jH;_t<@QtV8hCW0X950C7lTS)>E73(5dL=(&jFWQ(+8 z|8pDSbNkRwZXCeA67-vRa`0fS@S$??2A|v}^?Lr?=t07LT;!_-0RAdHDW^!j1R;L(ntl z9_S){-l}Kk(uG-7Shpwosb{&$!Q2|o$h)X1y6~cG#EZ`Y@tku*{Dl*U=lQI8)Mtnv z*7iS@?{2oNueP>iF%5w^}W6B3Lm4xi4)~s+Nx_z>&6E<&6(p#{Cd6v zd+(hyw#CGMoM72}0(2aI!?ZcRneMQy^ z)RXU%>cG(mdEF zm5uZ0=vy#6+9CZ?0r0?{j%$3^mJnXGQ*FVz^n}%~x zbu+A&svd*g1N%nwA8FwHufQ?9b95`rvC#p$~+S78^{6r`u18gk3@eI zYy*z#WM2=`#J5gc9X2!lg>voz`c~9`yNnAN*SV*?o@EQqW9@Zz<5zphi==NIeFnq2 z?JY6o*s+Ivu6X*IoO2ao4~;P1@B=&xr?x?p#$TbAHbOxC73qtp%I~8dG2b%@`OZ4f zg!+xBYvs&bwr#QN8nSaR4>E}KU4*M~$A0F26q;$)^NF4I6Ybk& zkB|#LgHvFAB4&e!dM+nd(>up*AYaapVh$${@4Em$Ie!(6W*t~-U;BN3Vb)33Yn1aK z+QxIwgOC`1+~AH20TJ+J2C&aNEj4LOsV zHooIie^B%n|;9aPSpvdqxH74aILG1|ml*tw{x!17J>-!y zWk&Z7n|xi6N$n$xV+|qoOLm7{%Jyhe*17iCj@_5%-*&ags@9)P!XNN}y2g&(A4Ym! zlCD^r&3B#G%W`4QThgwbcMtIAS^3R-I?cV7YAfhIgsu;oBnJriZ00J)euaw9bRBw8+=K z+pterozvD~%N%dDrneZjjL@5;4RnSk4h(_*A_HIN@ucKgyXg&-Pu`@^&W^x6M(b)+ z=ku&s6Nj+Z9gcrb;VvBIGw?{?^G6d$OkYgjz8z~lscB5M4bs{PS}DJ#KB;ex59LT)$K%3>6Vw@O9~`IgjApxXPPsjBUz@C3d0|SgNSw|iX_a%9nDy=~ zV}|sq4@nPxNP6Hy()}NjUTxA*m-()C4*k%&)9^*~FLeuPkKKo}6c?SsIsr#lY`)KL zcuRhvou!m>UpdRMnNRzBr{$v`Z;<-P$tU{xyWsaFDr?zM*pihw=qv7vux&{>efKSa zyvlfjevozl`CPm7?dXG0_vNrrxIUl0Em`M?Us-2}U(rdr&+kUR9bi8Xx*Z$Ip-tL3 z;#!!_eh}}ulsSgo{Xg|w&@=nhDC`c-AxPhUNARkSP2@phSoiY>Y~ahhZd^$R@jyS{ zkG3(!w&7ljOn8w0{Au$4qVk~)6qq(Jt$jmo?bui1rhT(~-FEw_L)ia@CN}lh@RxJE zwbN%p>&fz9&wBaj#AGm`b) zJ2dh5fSrZ&@*p3&Pb`-lu zk7vO?t+BV=(`|!4K~MG&>U-MSX|t|&1nrV%Oq|i{4fb#Or@m;pDgf@y822^Zc8)~XgQ`i97OLB|Ha?6)HR z;J5V8I6LM#;trX}4<){PG5Wys4S!HZX{+*Dm?xI`XVhQZ*sZJ!%Cg<~m93l$w`2Fj zDRbZ>`+sLWL`ppy9HqYCgOU0|eHb|lO?>BnSVtOu0p3{;GM{ATl2}G)qOT&Qy?L20 zH1SUxob-oBXHI|gZKlI6GBk4iWsQp_%b}^|6!!_(vAf3&P5jP0NjXmOBbjugm;V2T zBQJg$`ev$scfYgDj~X`Z1N+)!tWLdW_y1j+*p069RoMn$uTfuG&};qp^&rf7w7729 z#r%$azvOLHR_&K(FGs(Slt1Dp?FxD9So0+FwP9a7{4(X>Gkj(bc8A{mou&7D6yweS z_|9-QJ@hg41>wX0J(qnE%i=@5jd+Xk5=NbA8;de5btW>1eo^Xc;=6;)XCCS`J9Zaw z7W-O43~E_#~#O<2=2Zq{oXz34hi7v~`MepA{#+FR!q zsRQUSYaex(tl<+q_P5ejB}3lIN_QHeXY53cr4JT^2$aW zTPB%)8+74jFZ=nNvKO#s5oJLy=9bx#&#TMKDcg`ppe!$ac>6xK&GB^?s`h=C{`Nm9%zpsPhL-Y(%H!$XhTo}C# z`52$JUVh?x5koJ((=s$IkI@^B{Cv69$cqk#Q^K?nMZVaFMz*3&pnZiB|Juv^k?&uj zZPhO?G5HL9S31t+`ZC9kQqBzN7(?HA>W`$O-QIa9H9Z199A*5fS<1q>-n*vB`7_R$ zZ?JKB4opqOqbhL4*Pze(RRQcfSrdR?S<8Wbo9l+k1z+e~>Jqd|*xz^V0!*&staGL1 zq@=mO^QNTvlHa+?OVa;cocV=z1~|J3$A0Y25uUNZcleL!i*H|!wzeGkmW|>(lZ488 z@s%w{mfx0v4?*Izb7z9CUx+*)It8D$E6O!_|4M%FPijC#0{=opF?@aI0k1C z{$vB{pqA+)_is5eLmu?`Ke-cmL=PGMGC%Q1&5!dYS27RzZO$ZNzeb-O&Klfd+D#Px z!e=2@?)K&O8;X8~kAZb8x|P1}*d6;ow=-8m{a*;X0`({Bjc6yu8f%Qd13aJB9!&o; z-JkyDde*Hj6XU+dY{A`wdEN%B?TkVPgTF!R{rRDZZ;jenI7fNPwrxeYPWLxWcsF)x zowiX$UO0}ox833E+|!s7wEpM6p_^J^d&+%jvN!FhYRCGCNPGzM`=h9Hj6r)WtmDBv zWAswT{s-^d{z#cakPBzeTL=72;D_DVL|$;Ohm1*)ZuY#%*i__k2r@RRc$RAr@T((t z!54w`8fMH4-hQ}!N#B`1Z`HNVVvsb`-lK2Z9$14pt~;6p=B71!<#z$<3iF?o3G$EQ z9M~qM{6^=mV?LqfdDd&gF^0)|@S>P?l$zJpWiyYYe;0BA8=O8xse@Rz+82m?&iZTm&LDTG^Oc0{@VOyo$8H->;u^axiKo~oiMQU+Hkiz9^BbOT zXjlF}$XY|L=z6yt)1DJKzHKs9jzxaC)?nbQ^+fg*KH*cqhkc5JU+lJ8q4_qfTfpnME=3FHX-LU8sN z;EMbt{_``CADghKA2dxZXRUAN*yU_`lH(t{FcvMQ{EpSfgr4~dcS9?mp@(gl zxD#JHcKc34Q=B@qLhb;K*)vi;Ux9w>6=yW>3R`J`HKBx0KI> zLlXYk^6iFSWye+z8v60RmG9tJg!nl8t3QG@NO`!YMBodb#Gg{%$Gn=K&U~yBFZmeH z@t(==@U=d`Z^$2^7v-XTjWh0S-mc#5rYos`X5J5@^S@2^&ezm01N`2V*y?JlY7-KRREw_x>u`h|Pv^U*6 z(z$2#F181wM`#aCt)aXb0xXuJ-vtW+PZ$P@B9^0Hd!&~bUr zyoS^6ZP0CK>U>Ss7f!7$(evpXQzqpH`(A{bs;E@!&6S*&(Xz|Ae)zratO~vRZ;#^+TIy!i5q+zj z_e!JwlIH^&nKk2dBj3VbuH`ZO#TeJcUpd<}vW)zl&v6)x9!o6+56EA`+p-3ScU&t} z7S-?A4^cLRvqo{hUeG%7-x}Xu2j8ab(7XToHrnaV(I z&!f24=V)Srb3h`)=$qX}UW2G}P1xFno;+g*a!vgHEss|96slVIkb>~_*YNHf z${Kx1^p(ljHlX5T7=MQnyWm%PeJy-UGx(K${Wa1q^wW>;!T5W69;ZB5C6MxF) z+6eP7Y(KV2>IL_mnl%t!8|kj~<;<6};u1Z#8msM^g7t+KDW~s?ZGVRORqiNfIngvG9T}E z<6Um(BLY1Ys*1K9`i64e{lI%4`@s}XKy83@xq5`;gt_C?r^LF?5! zgVv#;(IK4ggnpzPb2Y3(*o~16+@*)S?PqM9L&Q4`0y2jjm-`GVR2RzYMY))^lRZ@3 zSnp7PzNj5*_r2nKS+4T;Z|OcTWdohWIZzX34#(zq=0RCJTbXi`YvVq5@`-p*7eV%I zhPAw7|DyPDvyq?sd-IcJAY7}?*~R#&Z)?2#mOd=Vflq(y)!!DFZ~4nKe7}Tgt#@E= z?|NB_@6&m6Yt`)kD`_5Sqg7KdKEHPc{A~SQk%6IMCuv4`Utyl9a%zNbO()MWqD%*L zIoO9w{BWMi^l$QAur+-i?)@qSAK~|In{VJ7IJ(_W`7GG}VmFFhZ-h^iZH2lIb&|vO zLY-*ZOsYQoIsJM1JVlF?wi+KyEZx@eI# zQTS#D+u=0vx2b>VDV@5Z65eKJnKnsDadXJzd(ZDh>C`DYc`)wW0FA>WwJcgU2h^N+dm z$94XEY}GmHPH^T zW1&NKW3}{alpF9nxN!)2Ep|f{)|Ll#{nR3^W(ua*47J>I8|b&V?@`9;Oy@Ut{|(g` zH`nl6d(TS9fvUziM<*pcO8t0r7S@%Y9Fcm-It6_Qy_z)vJ&O5?tVx91@ZJudv?RcV z&%g2Rdd^otpSJOv-|uL?JYhF;9=QqOIQZ3?u}TY0;(l`@+Jx+dM7|-N&)hG`{RBG@ztGuFfU=YtmwqssjlJ~M$B=fV z)?@Y3-cc6n?})2CP4b=o4}6Dl?;mnQ?~V*Pc`!n!w{`)O$DlllGYYje~ zdqT&sb|DOSICrO7^a_11Vk=;7#mryPK9GFKOC8s_XXPP#+sZM*k2YjYL?M4-AHc4n zj6xnyiG2XuK<Rhg5qLzV8+GwWY@1gq;~SJR@y(ta69lc)jQkhtA4j!42y}I0nW1Mge@E zd9(qkYdcrt%<8BLatx2(8a#F2c{RuQJ%w^Mq0C$D^Q>>eJdd0~h&3ZMXMTuvB3vti zwIkfe&T&51kU$6cgVxJKLF*T9pe)(HNjxC4P2dU7Re`TyJ=)WCH5~tSKDWXb|HKL( z?6mNdu6FFQF~~gmU>?pPkrvuu8}VHz@p2*h+d-Dkd2#X)^zS>%rq=V;5p!G0I?=Fq0+xl|mZlehG#M4okQdB_{qWPC7AIOMe*tEgMC!dc&JH&%(> zU>f4Bokym|M|R(}PF)lv$3Q;jJ9`Xt?M{|+)qIRq9N z&b@q5@BRikpTI`lw!?SRD(9cyjde{p3q6s*W7nZxRel0>9JKcDXFcQB0t{Jar0ceu zH0<9J1^=sdp)R|o>T;s^zs64%lOF01?O%@D+bZjV)~}ZW|9;RB2YwtI)Zx7kactuv zJBY6z@kFc8$229rsZ2kWdt&ZMIlq5yO@C*9!r9l&?}P{Iuid4``lYR~|NH^yCyep& zdk(@ro+SZYnHRo(%Jv~ojGUt13o^`d$va(E5zCTt2B++&@V2Qk48KE(-z_As-LjwB zHe?*1(l%`B(3sOUuqLhQl_Bgu|1SInz=d)^{2+f_@%h&rfUc;5zLD`Q{EX$VM4kCj zC(pH$G9L|nB(h*VcUOGvH3x8}q?c`s_qK-;Z$1$EU~*LRkZXa82%~dP)$XA6FAd^1 z1U&YWjyyT(7^mPYYRR)UHP4isUc1}KDC~$Fl(FVjq3@)tBum^iE{V4gmP zr4LH{^L*xY&PT6kV?54O@u3aL{=sLV?`Ar$*u5?&4F2&+?Qc@nIhUGzSo0uHRVG<9B_1e2*^+WfwmFS z_z-@@^RJtrA2{D6>nZg2%?NWos^-O{58$p|^Gtl_V$NT6%zlw^vvk}nkpWrnwp{9;eFV;2Xf_2TcM&Kpa zj`>#jt}V5gUJSi+BxwC? zwSC)P@1$Od!gh&{iq!)KSte;ve1uC;deqE=a{S7z~V3TST*W# zT|KOQHIV&;_dF>4)M&IDM-dc9DY3t%#?>_U5hQU2f z>0wOt)-j*fAL9|66C}P-*x!^xm#sRe`!P@F`hzilEEtYn=4rDF@Ga&}JNM%^H%olI z+_wZf^`xBlhp{s1B@e#(2z3h2wM0880#3AjJ*3^=7;J%@j|??pWQiA?y3RE0%NFk-rnV z=17_2xPKdcz*5lP(fyX}w{qrqRFmnG=u@?CJJ@P_96HUOkdDqV(iI?l=3#mCaRP@f zX}c-;(cbe&mw8w|%N0Cqj5$*B>+(yad|fv5gO#p)@)P}+5?ON1lN)$qKV!cp>s0C& zV+dE>hFAPXY!r{Z=HIsZW7pgCdmEfEci_}5##gLc?FZ+)8OGYz<7}{}KI6Rq`c&w2 z!)lJ*aE?ycz~(R96epLBV?2er0pD^d59@ym{qp9&ZB5oQ$8WLgccEUV?Y|KopwE$d zMjpHJ-{J;0Qy=un!tTlK_>Sy>LAiE2&yo4q25T@P&?bru#)hy(F zDzc8cDeHJ(AaRWPiadl|;7-@w$dt}LE2QMI<^R;R8bGUq{EAMDs9_)L)ei%3LDPny=x$lhEl~pQ7J~X{d)H z8)H%EM%whA3F|PKG>qZDVe%`7U?zL@)z9=EJgQxA{s+LF_rBJ!ElT^rcQclU zHICDLy$R^O_Z~v25Vs$*YOa`3q^&jEj5z zq8Q;KlLuiR!Ue8yKEipfuovN6R~To9{zbMctm1Pnnw$z>G=cCbSNJ5tCtTs<2p@BW z#}Pi_3Li%JkSjcf@BvqNAHsWG;Sq#)yTZE=-suVtBfP^E-j48AS9lQNepk2;;a*ob zj&Qdt+=Xz=6}AzMxWerSx4FWt2)DSx%?LNS!eNB#UEw-}YhB?QgsWZQAi`CyZ~)u{4!uS41Od@tMLZ7X|2 z1=x4-!J1pMRxdY{2;a%G7qQ+Z2WxC#AHyC%e@4q=PDBW{9$FK^hq}1 zMK3MhhqZGS&SkcG@E+J)Gq$1wHo~oQ#v}C?w3lIQSGL8qFL0e3pEcX!>k^YVcPxny z%cN~XU)u77<3C;g8)v`RiWT6^U(Vef|BJc1;`wuT#xI&X9M7A(BYyGR?OgM-yaUhe z_`Y(^c*ka}AH8ty*7yZ;2jd@~+rQKYy0^ej2V39J#$SxL4S(|d{mXHe>Y6C_= zF1(KL-08Kx5cX0jAMBxAzT-EqXW87{w5d#)#GiFj_WGQ0!Xhs5Io>`4KLy?rz?+u= zc)e-hVO`yALm7Z4bF1WU3VpSJw>Sgvy3^3t6iU>OW&mDS8hAKAv3^ws;KkCw>kcJu zJ(>Y{b{cs7fOl^O;6>8F+W~l12H>@)fww!9xTPlp@Y>SAI{Sgvs?)%Wgc3K6W&mC=4ZLo^Ta^KLRcYY$ zhZ40%GXO7;1|EDlwfANKUU?dLBYY$ys=Q?i#-{DwIGfB*bY2H<(qz^ewl#TkH?n+9Gul=z#`48Y4t1Fr?}R%HNQ zb{cq*P~yg;8GxtK!0QIQd;k3K&Yw&JuOINN48WU618-+2QQeaPc&F09+Xr}s8Gv^( z4ZI_vMChpuz&nu!-bui#$N;?KGsCM;p~MXbGXU>c8hH7D*N_2t<7wcPgc2*?$pE|~ zY2cwhS{cm%yu)eWp?_F8F9YxnrGZx$N(6^80B5Listmx}n+9HQC~^JK48R*n18+Ov-J1b;yVJni1$b5l;O$BS??5PVT~7w!?Mwsj zFyIwt0N!vKcqc-Ms;4plZ$}z%>cZMG5{}} z2A(gJD0?RZ@aogRD*?P{2H@4DffoS0c^QCLn+6{G+hs!;fLD_S9@e8QTbu!S)oI|h zg%V3gGXO7`1|IsqrK>UkuPO~Z^hf@q8Gsi^0}uW||GgQ2SDpqQ`Uk(20eJp2@Ww-l z&-P>h-jX!%P61wF2H=&>46iCXl=$nXG61h64ZJ+StH=Pn;xzEkKYZq32H+K?frs(Y zXBsj9&zA;XRVcCKoeaP$NCU4H@S+)jm!Ae+3*gPm0KB|3@FJnar-w2C&zlBbH{dPK z0KD8Z@cKiEt4A{cFDDJW9e}qg1Msrbz#9oA79Y(3Je39>`lH47{`ujZH<<<=#w&}h z48WU61MfsAQQDIMc&F09n*_YV48S`%Gra3CURm^12H>4Y0}uVtqKXW_JDvvKl2GER zgBgH#EDgMBz-!0=yzw;f>O+Yu-^l>HBWd8Z0$wx&@D8VeX9M2648S{-23|arC>hEC zysqTGysk9xb^+e148V(}fj1IL zTy``A@a#13(EnX_ZwBB+(!e_ccvc4BwWoo1GL*Qq=Oe-M&)w<&@b=!82Hqs#6=ncl z>&);zmlH}9K9vD@EotE8171Z2;5Da#R~$?S8Gu)u23{Gu1?pFVY+AniYrh&IBl(^uj z48S{)1|ICe3o0@I?|2$`$8nF*!H)#*({l&^1b!Y%0}uA##~VHpysPK-{|WHMXNGq} zKJK%8Cj;<~q=5&0HZPh1c!$%#gFQHJUIySDN&^q$TklW?;Ekn$7XiG*8Gv^n4ZPk^ z;{4GJz}uGw9_+L8SA8USf0Dm^?p{B1-r48L-LN~9IPWO#Z<;!vZ{Q@)F+9REk8!SY z@_atN^L##@6-eB}D36bg^8WT+8zfnLm`+9>seyKh8(Ac|PK^ zI0G^DtX?TE8|Me&{!g3>=#PF9J2J*?> zz_?2T`KwaTS=M=Zmt#3$1O`++el5`GMO;9~1x;D@fI5b9ic-r-rdPHVr>2p1p&#dy zv%a1q%{bfM&0D6EAA5!pJ9+QUbbg$%?JRYyGt2N{UUSg8`2jm$d3g_s=8ZR!rD~Q0 z9w@Dd&U5f>S8Ca)mAee*T`#|c{JcN^nuPK!#~F~RIBq3q=BR)+gu zaOS%552`TFZ8wwZX5Ni~a*O3&NuDQ-bMVc1&&H3OUH9S=v-5!{cx545VA7J8TYE3M;^Io_)x>f?Fj70#0PDRurX=dmI{7w>bL zl{z;UzojUq8_#w;6KI;{PQE$$Q{R|x`I{BM0~AbLR?XDAiR16NMNa&=!#FOq$$8J- zit=08u0j*}&x9ss{fC{U<$v?}`9YPl9dQSz;?Ty~21nHazb*2iaOc}tXyT%K>JI=r7-Q(02Jv^k| zf*e^mBc1mI2EVk&yR2gmWNbin0rp&+p)cpw1D73(9+UdtO4)^8slnY=wIchK_Xktu zmwDE0{ej#e;U5thubHWxFdxok^`O1f;0}!-&-h1ssEaPVtE*$r_8OMk2|0APEuP!I zZrcyqBh5I6A9u0v{t@yU7l?`U7Rfr>#8R{y)!bValhM_rT!1>+Fini9y^G+|E0_qu`Sb{@5vPA*kl` zg6Ct=LUoA!aI`@k*0PifS*u4J&$(u~dF&(0`T?`@(Y&5ZRoKS$8IH%b5c=kN{qMtxCsOA7t{ za&L^6x)i(-`X7B>K_}-7L&jRP9XSjg7STGal;s4iyEdRMci~=*eUP<6whbc};6Vg& zKFF-x8wFYDibv&c9NIm;Y3=h?)r$PQqc4uOz_!|Fga18+a_`;X;!6{W$eejz#P{RA zymsW1!RS&IvoCgdEBJp-bOmiVU-^j2=lw&xdx$XX z4JyaT3+iLHgWqhHSL}>KX7ARz=R8w)p^3})2i5GYIzG!4{}kf8L+_ngY3vZTBfM8R zZDF?9FVJTxHp$%A@Ey;`cX(2He@QC+TL172dyna#I<6Pnmi<#)`l^(A*WdWTt8wTc z3phZQRbI1Fvq}Syp%*N#|DO{HO$Tjg*jAoz2Gy*6jO#+5spZ=WP0YR%@xv+c$Upl= z#8W=o0B0n6sVeEPgQ$mDF~^SiN8abs&hNm7(n!G5j(ZGo*ZQoc)_~l(UIG|$hZOZ> zXky_#8lQ8f__`4G*sLYUXSw38)A{DO;ua%cuEse`TbX*?^rxZs-(Uv=o_jYtx$f-nAXGNQlH;->Ya3;JlX(Rq3w>`e47~YtIJ%#ATO_}Y!>)l%7Y5zg(jM`xe_Z)k&eB3v zzcipcZu&&epl=23#ZnIY$O`lcm1p+}1`f+Lb;LHf?q6V6xnvdNBLzLzjyl-uwBf9L z=t|Xjt7=O2)wbxL>S=xT`uo-TC(r7utF_$cv2QkQTkvK-!M^$%=$nBP>cx-xD3`mN za4#6^hxN~Ipx*+*10VF-FYa%5_0@IKSNA)8HR>c79TGbsAMdoEa&T`W?p*ccuibff zyK|S8#XBy<<{({VgOo8(0r=)y76zY3#BV{}RYKda3wSQOUs-6Ua|?aM$AVp8Em=44 zy>{e>uf-~69>6*m@p+3jD%c2C?z+ZJ?aS`R`11XC_LHV{cW!ErJn)J3vhS(cq4!UH zlCar_qb_DgE`0p|0LKFV`U%{}cgMY&XFkOFB+vQ@-06MyQZ1+bv^%=y1NQ;ZBa47* z3&PYXi=b1&c=zb{RV-dc%Kcn8jsJz(#vkSzQG}E8*mRb^!No^A0iCEur^D786(U6Ex2veUSHD!(-OL z(tlOfvR?XmTEX8B`f0zc{odW}?DuA}W3=v&{yg;l|2>Mb3OC{oLCP}wLG)n}%CK9e z-R%Q%96_FLeCIR$Al`XLdpx>a`ttssLiFdKK)-FNK^uKAWmC#$JF!Ivh+oMqyP#_c z>56|s?kp<~Zxi2uZ@t0{g-+{64`uwXLAB-Bd3uIhQ zJ9BH$s(J_E^2oJnRRwG-4(Rbinfkt)_d0#|x(4->Bn? z(Z)&^#RQ%se-5ms=%rIOE9+V3FYy=Zdwo*;pmLwjXyS0>34QR}Q0(s4M z?%8|mc<9{~_h8NdW09<#$d@bkiVmq@Q2Ab!cG9m3oV>?!k+(wU?IKQ+H_E()G7gHb zRqS(2{w2uI`6QNI$NaV7Pc5&#YxZ*c7PLVd{`bwQs$5;YI;?J5OOJTM8 zCLQ*bBWRa^|Cqx@Ah|orS!$$U8@PvDq3UT=Nhv_}xNYvmHUd3}ZZBVD~xY z`3JKSWy@85#4h|5`owF5{|~`t?pMdO9#rU`q#hS_!Zv(J<-{*mxxi_VcS0`zjpF_F z3U?Rb9_uyD@ry=rZ|VnwXVC>bcpqszGAj2I1E*>A&$`!gZ;5PFt~skez}=b3#`muF zTWABGLlaxuS2&BHQKZ!$k2@Oc*~>}cq9kNrQmZ>sp^ z_UJN|54>BWw*VIS>8=am8}tCm;2m5-tEQtVHLs*Q_bS8ooqYs0qkwcS^`YHB7uc&&KR1g_&?Wl%-Q}EbgM6!YmM1($KTTSM z4&9!Tv{tUMVGE0WPd$tN+K+y`-1yO0PlV;7*JlG4;P#MigY}_z%k~gvSV6`LE$`aP zFh1s-81+cX9E;316(){F9@qNi*HgL$cR9j{O0C;X{b7QMoc#FraoXdKljgsGX6|-Ed(bs&=ex{sMouF8T)Ip+6#@ zyP&Erbvj;o|uLCUK&1?9gEZi&R?RY}&Un_z= z;3Hn#m( z^aofl?MbnC$`LvBSUp8bNlW3B3wr9kh()TjST9BJYb`}Ewwdqyv-aM}WD+Xp{_*`| z&+NU|v(|dn^E~TW&wAFg)(+p=aV;x1R;qUfGu*H7;C3jkJ`kmUM{Nvd(d+3MYQz4s1>za9OOxrP~XKn@U zOxU%?y=Go**08qOvRLg^d%WcJy9?0xmrLO#0&X{xaSBj76DJlkT*+|1Jd6{~g3 zvP|NC#xnPsS>F97+WbK2?9||I@1^hd(Z3=!3rulMvCXqgI#clO(!<9aoEvYk-&20; za0h;T`LOCb`>dW@M&8%EKX$z*n#r#n$`k!@lzg-H%-qw7iyzR)g%7M(9kJ_G`TfAo z|DSxLJ;QgTeZ75{xkF2b$~&9P26Ect7UdqVeIoY+>&O>CAB`{ZIkZJ%hIdYFb9wZ(?`z9Y~eQ*mkR6RIc!6 z{nkmE+yU`R_Vg?HVia4trsYtzL}hQ>*b$!?x&5c83pOju~vDn=&JsN4?HUR zGPl?+Sr_fq@BRM$%Rh^TogM1m*L!K>_s8yE(Z8vee)}Kj-#@rzxPR}{TKWHs^)B(} zIktbZ-VpY0a4*wZ0rpEo>uR-0);n`U#huY7+DH2RFFWX`4$q%;dv0$_z4goQp$Gbv zPTNL}vzdhXU>L)ItrykWNM^G?)-vAMxo+)1E@yQ>y@_s|_7~4(-92;7d+`xQD^r6n z|16bT`w?GPy?2@I=gEc7W~UdP9?U+GPP^nH0H$xy4>0z zi=9$rCzva|FhCvksss7zn*$BKPcA&5e6k(j*|wlQ!y0iT^O1(yeJ^D64q7yDHBxVx zWX9S+1#N`3jlGMVs-P@8ugVk^F}5u{U5K0KI92ennAjs53j&T-25s3(UpSn4RM_g5wt9u$0G*+ILjDbvz7ugp&bW%h?6;~f zA8>kCUmVib=@GqEhxGL9BaDUbS$Lpp-@;?H)0~Fd1nYNet}Cfs>@?2Cu4bKahx#aX z`4nXAdtSYhKsN7G|L*KJAH?UJz~`m)xJxptjx-5>+ouPQPLoZ%;YIvPcZGGM=dMRT z(9bQs;L)n@e7Ako-{1=znd?vMcg#-aE~dZU{0QF6^O{HHsg^vrM@?gmW13by$U1&r z-t7+Gp(pS5dUF%^i=?CA@x0LX%OvP8JbM@APIrD2dSf4DK2X%&xyy;uj>^uy6AAi5 ze090~4*R*ZCni1XE~Ve_FIlmA_p$ig&K>8)Z+Ps;+{~>P#`qqt=AdPwLv4*I!GBVs zwLAQJ`=Qx9=oNuh^T=N!nv1sC`p9#>z3cn!#TW6!@}O(sF?d*68%NK9X4g;Q(QV>O z9Ci!yATSDB&;7eP3@5&ty-ysXdK3`s1kzMR0IzRYKd$2ycC_BxWmz5s6J(p{V zWB=bi|9Nzgn|TY`I8I%8!W4C`c8P&_Pg^GGY|QMtDQ4?DUW;$vnYoUGnY3o=3J_fvuv$5lIkyzqhvm$dNu?R2B zj@20Y^t8z9iuD=BJ$X|sbL06jZ*uPRy7{DIqpZ7)e)cMJ$_GtJ?|fq9jN25JnVAxa zbu74wZ-3`bFh*A(GtYH;3Fc+Ff$qKNiL6tKuPPeYxfQ9Q%w_n7qS;HaEtg<}G5%-H zDN?_Yk1&R=>Zwg@&gsPTzRsBG(kI?grxG5_oO-*le)F{PK82o+x&3y2itpJecL%^X zF8>OBD#1Nh=YvJx>3j$uTe(@=aeE}@8sm6hr!Cl%t|``fZr%E=W**Nr79`NCW%SLs zZ!f%XD)q+9Kg#bRy_(n(IY8V+^DO#A{d(W8n_0#>-=o+O*1vn5>qTf2IyIcvSp4_U zx3f-}VB|Alyx3m|*ZtT+*V^9w;0>JH^UKmgABybe5QcFm9>B%(^^~oTy4|zF#>%##&s1aOg$v zLYKqhUq0W2n|SAa*A&b5K;5#@7tu#z*cxl+#9LbEXO)X*v|K-R0c+f!zbWROBO4tY z0@>Htj{jh7#{y)#p0-ROMw9f8c*8vzGt|aE{l+wQd@!Z&sk2V#l;IC)2>`^cKB*nah0hh@NxxZS*SkDpG&ZCL5B)wn3p=U4=rn01 z>X-D5G?$Grvtw1gQ|G|J@wuCh{jkC`zxrYx3Hc}`$abH+V4w;%2RL5u=XD@ zCBt*}x`fHOCYPh{I&&y9jXom&=pfg#>!wA^*VRYk*r8>rZ#Hr?=W&g9(TcS3Z6@#9 zg>MUoRTI1Y_HK2?_~x?H%ntlO@>$v#yH!Qq!J5;;G4mqn0OoQJDG%|Z(}=%5NZmo4 z=sEcG3*$r$@tV3Kajr&UJ$Wo5KGa#{zqjeDc}@h+oATZVdBZaPZ~vX+(rq#8NEg?yKuQo3J$v|x_!B&o*tV2}l9na?m&l>Oa{0%=3ZA>%%$u{f~JtnjXAHVK1 zC$iJwZIUsZzTfeALiM^#Irr$S$N{xWaJ}duXt5s}v2QE4KTY}Qv}59-`YYvPm!9bt zum1nyliC2EICtjEO!#mNo`8dS2w8d7`iT2jZ+-`StlZT{4rf1%+{b#FV`U6dlh zR;Q|SBK`WP<7Vg3S8u`3rFl%b^L&Oi&kmD}X&j~ggzC3t+%!@K`RdfyiM?^N=z{E= z(fKn+X50MaOIRPuW6aC&p-66keTZDN}mt7l!c0Gva^|+NfwX^Y2Y2$Hzx}57CtH)oXUpFN?tc+JcO6%gUIPnwC1<7WKqKbXjqBv5AJU4IORSxP19`y{sNS;K#H6`)^&^p84_Rc|QDHn{RJD z)s`B3`saa7+E=^P)VUtIrXODfu>h&TpZ+;`wsM*p{Mnsqul61g8#}OcT8M^=+$7HXxLW$d(6$sZ^l+;IemRs8wPj2l zEr&rFY0bL|;EM#GFB=wi4>2_bu!5ufNItCed(ft0(SS9mUh6l6$B&Aad23LXzj^!b zGTrc(HL#I2nq0q?%jBGg3TdGC;+xh_H23i1N9G(GkAK1`;9>PJ50SeDr`DGP%fq_W zg>?k@r-$($Ctl?7#ktorw-@f0%k^d}*vp7-fi(c_Ydl1(NC|5#^5e(5iGA-T#*O)( z{JG_w-fQihe`DT;pS}6~1hz~zC@{9~YQ4!z&M6s#Cons`7!(yC5+i6 zj8mHDmvld4$CeUonj^IX_>rNZm#nou<54`MJmF#WYY%ff`bp>KUTjaD`STwsf49 zx|rJncOGy~2$$d)I3}6I%VCeX(shZ=xoXNZ;)B}CeugsXoSI8%f5LFiM$V3>$YPsx z&7t$OnHB)?B-Bj@|jCHE8ILtrq z`EpZq9DnjX;5e#(N}edE#9M}J^qY!~WjD9GOW}#*{t?`oppPT`LfmZsaB@cq;<0*> zrG$4)WM%gR#!u$Y$WlNb=LBoy)~_yqf%>(VoZY8*c*#u1418Xbi@sxH;u#k;&SdVi z^VVQZVeeXSULLmF>Nk}^-ieEsMv`24DjEKt7J`_LJVfM3yI9q)FFK`Xk)`R%1y{DKr zJsa{y|L{JJyvq)>_NC=Fea+ovqTrq>#6vV!AGCcSpu5IdUfKSZf3J7L`k6Sm0vYVL zGI+5mWv{lu&l&6ego%1lQ^|8Nx?m>HCE#b*W5BOXG{{~`Oo7#5ZmV}2`H;zcy+a(0 z9cL-8iupu|<`UcGgJIk$csEhydC89*CoNi74(&`2w=+*?t37*;<_>4R>8}ZfgD*JSs(V2A8+WGu`nk3=I^5k^+tVHkv~2^hJFCv z@3SADSI7@vM>strI--aeMQ3G*Klo1e*NmNN?6D@r{AO>2&a;U*U`?R2t6>)OiUFtC zc&p3Br|g}~+s{F-t-86r(>tPm;C9H?Oc}Q(&R$*PSbhptm+*KfZQMJC<1ajDP$7aP0i}7~AZN{bmZbVi~e8-}^kR0l-t*i_agw zXz;FB??@}t_yyi^(kg?#9Ajiubg$?uMs{8(331tDiAf^y;6-xC_1bpAyik zVrvECE`1N$m3dM1!TI^)u1_<{(>N=-`Qz-BYr;N|8tQo;deBuoOXn8Rj=6+%%3`(S zV`YWyfUY~$e$gSk#4q|{pZ5X!{S77-wki8@WcTmzYu{kv)SVda(~C_bv2Vn>4qPy{ ze^&iI#Le%Y-Cv^4gvD{dAK$Ta((v;@Sij{x4;GKjLlyW`hHVzXpa*-&U;Ja~ymzp7 z?0FBwO-R3ktEJmWe8ic9y^A9a-RMJq+I>^5<54IK9MZk{HEdlKE5Ehs*KF0uN zp2g?O&?U=Ww&Yb~`tGbE+P2u)&stFhbZbQx7nK{ctfT*Yt=Yw`{pL9PXF*$HrcF&h z{}J|iI>f#PUn?E}0o)BErW+B0Br=Y4?t zVcN5tYenjf_i0~;`j~LPEV#F01h`q7GT^J7pRjK+qPZ69cI-X4s!j8U-U)Xdc6&B% zav!+s@H@1{w-^0(FQ?rr$XhWUY+}nfJt6M;5Ac_NdZph7&WXagD*B<+P@arN7-Dme^c$i1^&%Fpt)`>$ep3 zjm}fFt?QeNXEDa8^-7;`Fi3aZW{qX+EyeHE@#GiVJO3V>wiLtXN!6++yskFq+4FOj zmSF^-v%|J%{|jbj(Zx|cAgByI)yEA31(Pn=}uu)9eQ=dC*==kz!A^TtA+YHsV#TZgtI zn|4gqGp{*zUGIKkLcy<=#V*l@`$h1wj{MU9v8&Db0p0EVHNmrV zg|oEGK39dX^;?G0@F++Vk4DcAZ!jO4E1YhK{O7rpJCpQL{gwLddVh0r(%j(Ok_hWL zjmT~3Kh>Dxf4aa-Ax}AWlVSa5ZRS(w$GRe>v}?NWUk&(8oZBP!X1-|c%6OVG!%O{@ zw9UxXfZo;ry{S@r*X=Q7tkW9e?F})L(JXbX|Fx-NJ-34Qm8{zeSH08RV#gJm=wtpG z@NTUEi{@e5xUU=DV*;H29PBaipJ!^1iJLIRc8>|~phcx-`C+|jQM&y`GZDNrew0ARQZB_(4M=uqd&2h7TUnb%Z)I=4%0*VzGWTi9UhdB;I%WiW z?(wNuyPFv15Qi(ii9WOCM7IkU#Y?C>Y#!{_D`RfYBc}@ch-{V2e+lCBHb~k%&2QPxt&uL0U9;-gqwT|Vy#LUwFy2EkY}mTx#QI0C;A{}uQ`+yx;Hh6# zOJ8YDnoob#Z{y$ZVvfI=Jbk%7)S7B5S=2hJ02uD3A2hdF}QheS`+srUfoWsDCOA3?Kt1s}^rhfL(q zEbgnhFB3hwS_0qC=D`N|`<#`h+wLEkUwFO3VOPh>o7=O~oWr(V(8`-XPTQDUFwct# zpW1#qMjfQg3h{=q>Y(Nv4tewrL@sdke0rLxI1u?oEB_xp(_eh?3tQQvMO;_f zAZw1Zld^ZE26x@5c8lg#p0^SbGUKX-OxK}V@@rJ^&G>wUXZxIFFBaGeQTQf*C*z&7D@dQ?*>@QHZnV&=DHR~YcWkG^%W-M1?KoZvntyu~Z<)tIfmdx(A)2eveGGqI<)${sQ$ zj5qG87k|)R`vZT^Tlald_f`07K0lm5yAQ~YgXZzn;LbOP+ql;`pfMg>Q+7#Zb~@ug zpl8KH#;{E9drh>z-t_Lcg@4Da-!aup;7TW8Whj@;I-=P4%dEnQQ$I}uQ{vub01hamzQ?fqm6t8!j z==y1n+2EMd8}>S7oM-U%`m8y%-Z3ZEPcyIc{&;HW>Zz2!a`yAA)&IdXDUP=D9%$J2 zW(9UaTr{A}{o~0LYxWJ;2%6Iz4|q`J&-;EHO}!E2942sPZa_O$l#k3SICt`tM>gi0 zk*X}~c)%17ujSq0#7C{?$shMM-~VRYK0x0*9#J1EmOZFGh%c@`&A%@18k2!Pl1aPH z?jz`@AKjaKyTCWPBlXt5sy`WY4TBEtN)kUfBe%cz z8f>Xct^Mk!B_}l3%$V52`zY__QwiP|F9W`U_ockIeudQFKmRuL8Mxp~e~7B@rQVou zONhU44cAj21uyGYf9t^EFg^6=7UFyLOU&0U?g?Z4t=@-b8@un9kE!l^-j<#!`9z0f z6_;qQRdkwLyod-U#Qe?5L=_PKIi+4OncPg{8%H6{dW1oM#D`qWVE@3l`f z%%}SC|4r&bw>RSl%zXOdwpCXWqq%MxdrlwDW>(s9*n_rxYTvrQz=Id*!*`i-;={|Z ze@nbauq*CG=l0Ja&yMd|y`nh-_A@wD3h#Wqr}UBaf$4RfyI&jQdyuc6nA>gW?k3?X zJbj$L_j~a@(G}UWs{7m6=ifU+nyK~R%^O9F8%(4vl(`-4 z#6N#%0lvw2Q|98OMGtq*thEsS;Em5g=XMC|oi z+M)E=jSqV-uxB~%%mY2IdTU{9)$_^Nsvpjd$u7*tkNszk`v7)gPnGP%X7(nR;KyUF z-qmyL3L+0>LzkC3&eU2I=1q>1F-wWXU3$+Bhkd*=_^&sK?@u#xskc(~&F+T|1HK5P2=~cnFW+-8#p;k+DMSv-l)VNM|^E`(a&+ z-{5!m{$Q_3a9Q6e_L9qe(o2>PxC8Vtb}uR458fHY8%l@E_oKc5?$L0rOa2~TN9PWa zFCl*DOq#@=+<@@w?kYcE%P9BDI7@ziy~&Oh7mZmjfyX0jv;}brcKjCKgLtTL993WF zeu6nT{6rtl6h2<^!h^nyRsY`Z6B}>*mc5|$cG*UOJf#Nzu}^K&1--;sNu4fMi{&Pv0nOCa@;$WvQ=-v`s@|O$Zycb%&$H= zTn@JXJU2mJWBZiOlOulKJFkW~6Kv@yvJV>ps? z@x9Xyfh3lKE=C z_+jY=Tu_I57Wl1s@NNL#thMMMPqojV_`lRXGmKN*o+C`%yt6z^o00hk_|@6GeP*7w z$o9SBu&f|oyk;(Wf1StcMNVB@`Z94|tS*UcCp}_lU!B!pK6H2B3vq+8+5}}pXf&kjX%-@n$LxLDzoL% z_RMbC`$IcqpRiteo_9;co_P`U6Rj1-tqx{f)OeF`lTe;~WI;U4=4VqU|5P91qkqm{ zX|m%(o<1wYZw+yI!Yw>Ai+wNWU`Ld7#3!wUCY)Jos@f8hCsI!{XJw&B|IQ8jaOWEK zQ{caLBWAMpBXVEG{kg$?MF3x&XD`J^;m1QEK94g`n~5D>FkbJ_Se2b_*tCkx>scd4 z@q-zSN$B17z|U0b&(He?&~ueuk(sIUXYy$lz*PothopP0-VNu6Cr_OYaa0;M3w}8C za*#eAzJ<6lAG0=$*5fs{LYD^obavlNJ}!3b*OR&z z2D+|e>CLiV#0CTY^8#GT^2;H;OzC!o_qL~hd*|oIhZj?{4&m|WyUiZbB#S~Zno$5=k8@DBRj;}1NU6o&RK{n zeS4$+Bj~Xv=$a7jT`ybum!*boxs18>D0YnC2Ej#*zny&GB^+F@xR+N@i$(uB5}m9wq*Y5&_7Py6=bd86z_?XwK$PV0}d z-n`gs^OEO}>wg8mqTa(a~ovd-68@opi0evDJ3k+!Sd5p+s3_l=@~_{+W49d%!) zc4%&>^6WY11K8aWGwKX@$uw)YN75!wzQ{M6ryn|yFQC=vyzE8fT$F9uMNVU>iS9?< zo3eFIBAa0keZnL%j`LIXfsAwBPu)a(onoxudD=Dc_3NgYdA-b;Yp|zy*Fc|Wr2mu& zeqB9h?Z(Z-v|0B-(wZo*fxWP9uz$R~WxB?b_(pv0oaeDH)*CU!>sTY!d*PX_v;4DZ z?$Y~OH|)bNGnw;^;9tnQ{CL#Pi=QAq_P&*=lP7e}*>fA{Pts$xi_LM~uMNhvQTbQ> z_EFnkML)$XtN&^|VjOZ(xi_~4HgaX>)9jb#{C3Mz&R+!FXcN_kai0z&~c+^|6Kme`&Mg`s^8((g(;+ z6Fjc8^F3&gUzXY^`rEOfp#1^f!*dJaqj4jfbxw77*L+95X6d>g=Y4y~jt4sDs_)V} zt^FYxIPUwFnIrWkJW~~n3s%P`_V_%m?Pp)+(tGMsCx1_Td!$@-=^8zTILo|S8AGOP z47uUe>=xR}*r73|JIUP3vuz!)FiR|qJx4HvQ+uF?9cR!db>s`jnVH;ID|YxD#~JDp zJ_T@R8(&!SVSGV0p?_RBWR{wPSJQXkZKKMvKY{#K&cpiEA2)PaoXX%= zRC0k#oC(tzU)!v{kbU$H=c(zuG4=OMUQC_NAhL2;Z#Z*kDB%@hzj;1ye0(;>Qzu^| z-tQbs*RVeA-J);K1jccfeqm>7aHISgvVra1joSM+CPG;K2YqQugEL{Vc;CA!l1}U) zHp7{4rDQ8O8;Y`SoJV~Vw5~y1Q(styFMke;YEC*ec;B1Qz@cvvPy9`Lo~WJIuZnOs zgeil5`2VJ)!@T`3}=r>)$_4{{0P3(a|9P%)gTVxpDGyu2<34Ab-_g$$xB|{Kv>2w!hljf<0Kl zTC6{xNqEuWxb80G;bt7aVIG1eW+o_YsALQJFc^w)b(V6md zyW33ETjH-91!G76e>Y>!@jHQ!3AT1C=hkU{aKt~KUEdax&h6&heZ`k|e&T-<%l7*h zfc4k>w@j))uf**hr9ju@k1@eoP%yr&KR{jQ5=(bN^pj1aK7YxNnfDA>8>rb!p0h|g z3;SkNyc%mNYdQM_|NZZVeVW$J>?hx1zMDaQaE^P)DSg-)aqJ}fy%x`82V1hdq~b@=nr5+a2WPUDy}n$~V#%@2(b3I_Hc2nAfN7 z<~u#kx#9U=wZ`f;+mEg82bW@*{XHms&69p>EC3yPv#YA@97rwjcJ}ez!ee8a?$8ZMQff7yUuoH|4c` zcnluh{=38WukhQy;a#>ra$=3w!Xa-gcy` zdEPb}=5!_g+`7^4&hX9HGkh;#IA1Z(&*nW7t2VSK?-}@^*FzfN&mHivwegEZe;k~r z9mWy~CN&hwpKrEKrGw~D!Jx5ft>13pTBhiQt%L6;EY`tCspFRfJFnhVqar-4gpc8*!;+w`Z)-2T&Ly*i_2Dt7QK zW~F>9siBs|Do;F9d0|Dr2;> z0o*ryo4shvX*Ly^QtpenqQJ4P{q=f%`$_$Qn7pzL_XEoucf(<`5GYB1m6%l;dPi2kG(P-mtmV80roKRbmo0JFA3oE-&<%Ic1<@E%A z`q+4TW5e=oyg+hj=6EoY17xq9KcmZ^-zk8ZDN509;S4(pR#7WUUvuKIzXUO)DL3|{gt ziwbE6u8IjS7kx-yU6`KAedH&?tLkFTfJpzb^lbQ9e55~Ue<42I-zMe^xe9O!>KlB! zus&eQQiH2+WWKqQ|4&;TJh*!PFl~bMZt$wM^~sMA#>es9k-YxdZ`%}E^iZIySE@hu z@|+ra-vzV!d{h!D9?}h zmOX?orCdBx9lYBrd{QS5PsR_pW5XWyJyN#CG5P1ZLSCzW>@?~1N}u0fU7S}|i|@DT zJe@lE!o8H2R#|hdraXg=>6ARbeW-Wx&1?CF$ic$01qZz8z3t}JZnDVZS^Ha}H8Z9p zRL;7&=&a=6cEM$546Y!pGNo*&R~oM?|1S(9lWpRz19DeQ^xyv@V<}tRDMB z{fYp78SmSI_f5R-3EnsJ-o^$|PAl&-!TWi<_X79??^o+R@77X>l@;K(@jj&6e$qAu z@GkE+1?BYfzCU>1!~1Q)`?b6e;$H`M@;;9ug}JNRCd&S}y2qM&hWL;l*ewv}ulFZotw z<~x_mW*s$VlD9dNDP91Z5GP~!#WFlH$oO?CjAUJ9oXS0?yJ8Sga zOUI4TIEHDiL%#pLeGzKsy&H~fq z!*t8;eJ5Tt2Qaa-z_bQ17307-0Z$kCFt@)w4ot}RbWqOO__Zv6Nt~se-DbM)a3j?fRhG)4elK zhv7dpJ=rTy9dQRJ;|RLqV)n)IeR~_1L>(Q!yUTvZTk+M}?}dFnt>ZRqd&Oz%Tk6DF zuV+bweKvLMw@IwWH!Hk+{l>fkd;|L^#+q9zF}AY7%hI$}&%TXf4%O1`t1t2Q_Ia(R z4i&aVa~sh|G(aCe6xOLVYT>B5y-%MyBD%<)3)`c12xpZi-17BRpo16X;aFyI{5JEE z%}1o4nX@u~8o{%wwx2nU3x4yFmHE&i*e4m{2K=xMFIdZ0kMcD36zFL2&Vw(7?}He7 zeaF-3y%66$wqz>z*q1D=`Y?@nZZIEf@!xNn6SSkke}48G{{I^-8lUp<(R_z-a6n_= zBO0g1i6?*j?Dl;$HJI6q4PO%QEwJ-XR28;C?M>x=^fUken``|4XSa?w4yST&*zr%} z=Z2%X(}i;jc6d=cPQDkul`#hn=DpbKUB+Cy z#l#E8>j3`z{~-MP-z|LDo|?qy`CD6mM0>b;VUN+J*ema4!+mo)g^X=_IosoSST)_Uyd9PdY*IZsa%e*Kq6e1)8vL zBHFpdSY5F6E*mf17^Z7~HnLE%^sb2dS#@w;Qpw^O`bM$7DdDH{thj<$=e_7!R0I;!d%Ey-@n<)e#oq8uB|t%tA6*WjYYu^XtL9Zo4emM$`;&! ztZdk7>NaFKCkuV5em$b^k>L?tS)CfZ>yK9E@E7R4m;7C8VOwZ(Ur5ieY?Y}sE7jq( z{w^(Cut7egcDYCVHo>b)RF-fUN2j}-+20!Mxu3~*0_0P4tPQ*La%|2wce+mz?=<+O ztb7^ZP$nFFJ@e*H@UGE&=-e+{MCb9&2nyvpUthVDBY9SNy7bLL&Pgj~fB5j;3dtrk zB<`4)!0D!`JE<5lr`ca4`|`EIQ|qR{J(>Jg8wmGID18Vk}5*F z>pwG9{^gPJSTKJ3omQXL?ML64)?fUr@Dr`2?^7qAc^~nHb@}D1{m{Sp-P8X|i_b#; z%g#c7*4^I~{q5X4pnu)Fq`&navp?IE3RSxIs097 z9%2dmT%y^z*eb+su=jFVmie^CyO4*#OWz7MmMLaGXu|FXtg#C-`@h{*v1h2b{q0PQRA)Z?tJjIG5yn*#V;ye ztJ3zVune33ctasA1p__PLHS2C2IRwt&S8wW+7Vt>Ut!nmuz!`7MnZ7f?s>|+=0 z-jD6H4d4HoqVHhyujFjQX!m!)oi%*v`k;P)FG2FyO3T;4r=tAf-f>%>_Gq!Mp`gxQ zkGL4|xQ*Bps|PKQotTdcWkUOWy>9E=i_U~L(r1d*@{<2&qoqLsEc~=S1sn4M4Uq$_ zOO*y?KMUU~BqQtQU?-B-mWd58?CX$jq^(}^H)F5ifQZ~eB7rGKU7 zw|Vq0hyHP&{=aF2{xbvm$Injxm&cWTOV?5KKem57e8r*n$^@1u9&`#bZ@lfj(IkI%`y+~QrtUK{#HqRa91Lh|Ui@?rV1 zCBI+%W~0^|3-M+BqimQjT9c$-aEUinK5vdbo2_LZf6zDRA3lFn_PG7y$oTyOcw)iI zycg*o!Xx>c@%xA1I6J_?JgWY2w7(E%ix+S~Ib+(7&a4K1tK&l0;d+I`JJju$chnTt zcQ&3{eWta+fS-B1+<}dkNe%s{PiHU14rBdUYoOkP*njXgpzR9PnWrB|^r)rLOI22n z25XObaPhExs^6Z^%NhS;^yxh8%zd2wz*!(&FGEYl!tTj-K0KkG^%u2EwxsGHR(5S@ z&!$cei2s&;-NeS1Gq+C-u2>W7GteF*t7Ass_t~|3w$oV)~v}E%O#V z*LQK~$q;8*d88i+(qAFHk93}up1qjw(2#zI@zXns-_xe^5cI5c*-DJtJ@#A;;u>pi z;hQR#6GxpelWGT;3sATGW&GJI6TR;FOwU!Zj!XGp%C{}dp{mTS*FE3)YrfMl<4Bdh zUztg!`R9xr<~{wN;A{i-diGCuVsiT$65ns24d6wXwL@Ln+wIt%_G@z2JX5NoNi z9XU1j{NDn-CpiCH;9rmN#aW-s;O&Y>XcOMzLrBwb4Pkh^%!`e-GG^nV`Tn`|1$nFXH{>#=jbV&}7mgopUj-Stuv{X=7)r4RL9)nEqZc;(cuKBc_{ z{lqXV##SHD+={)P(7q-SjJ?Dggkz#_tNVMo!@OSdrLp~5^OdEyKbJbW&&HD>dz_8= zUnd8)elamU8QUN7>Zfkz2`^Oy^^fV3w873-#A|?JMp0FlSZp9fZu38)wM}vF^6qX&eEZk;ZqF_^0i4Dpyy>4Bt-? zK4%uR&IVGM@Q7i_ zE;E^CV=m5KPTY@IYO*toXgL!eMAltq&(?4_Up-1JOO$_|Pgoh&t$#b0_WU&}cWF~| z>g1!-tPTlq$@e7+ems7&KjDOx-{dc&;&pa9?cR#7ZYgox@Fz>(RR7SPLHX>v|H+Sk zp{+LF6@2Y{w|A7<^`CW%%_6SWb@=VD>kM|?m@`FG zeo$`PSo#>d4v;^07^Y8OV6U;6;=J9t?3uY(@kL8tfX9k^I<;XD>ps}`KJL$3y>*3W$H^Y_W4MlCV;Qom zOq93*2ij}hj4|m@qGrZt<8?0?XU-*DpCPSh*>U%&WpCFMe>PgP;Inr8)!s({>-b1M~k_4!!yA|m)^|i{ZyUbI$+kHHr0v;O!S$G8`7n-J2yGA=tnvu(;;?2 z`hSsVqw9ta(uucqu`OxigkT@0wXyXqU6wkz>kGuvc!KZTe8DW%63bK`a#OA{<5n3StG#R+s$`! z;E7!$=&kqH2Usth$GbY76KZ2%pXeOq{I!98&3nMb?uXA`8%TqP`c(e*&ptPgz4 z*!6)WKMd9f?)9IC*9SHYKl|$g-}IlyTOXk8QR@Rd2kQer-{ckWYgPXbtURw;_AT+X zLG%{gkmm;4+@SRp@m*^xb`AHoVZGJbxzXZK=JPRP0zO)sU+>x?5&7cEybQAT){^gw z4&k-oKKA+WfbR9}TlM9jEd`U5`{^;CuU`g1mCv(5?bdcvQ#bw^B{=4{3{PDp{{>;0pkyPAgO@!i``5cUvXXWg z&Bxo)5v{K#SZg)j{e|nSIb!dJPOF~q3guOFx8o6Z!)PDQ&=KPGzahN4Ut~7#9@pYdIR zqy1;Mo&G&hNK5Q<#K77uoC$FHp?rGmadHEhdjtERZFK*lZ=|OzjmsHS$XcWH5xQ6Fv<>K!R%@Fty`C7j8$V)o@gCL|zw(=Qoqwlz z+*EEC`^AY-{;bCJVmlw~x{Nd19)QNlpNx?gWUHiW4nB~_SnF0@j!|Fg<641#rkHut z1kTwV5X~4H*IrT{%w3ZI-Y@;5Icdj?eKFCd@Y_DZk9DDbZ27p4_bt7tlMnyg-}g6Z zm|nz5lsBj2A8TI9xk*d)U6Y%y49=BjJ!!|20emK;ui`4Y9y8^$J-g9HK9zWwrvJ>+ z_q5I4NFQAi_*aO}pFIGqXMF!l59yq1+twANKgKsx6QuVC=?~z4xry}q1OLk1#`;%Q zF@Cyl=5ni+f2+O5V?7xEiga&nnu}-t?3F36eSS`(aqeSdb7$X$v5wl>=R5D3j-RE! zs^fFD&u58_1SOXV>##*%B9X*Oby;N72YOu&!w{nENK7F#*z>#0s5Q%Uc zm2THLC-6=CY4L;HvNLt^p~rkaPuMv3CGe$R*fmG3k-``6`kzMKo?D(>&iX_aJ<&Y% zm7#n+AsdhWvHa>w=tBwCySFk9e)gjFtoxHwv$tZ?80HYzWL%51hNqZwa8lgEGR12t zHq<@huRX1L@Vo8k!U_5KhP2G5XIPHPho(`{QuSMU-ane2qNSJo>9#^%ftS%bO)vPf zH<&Y{41R3%@db=uMfjbIut(AVq?HSXvwX|AI6uv<+4}azHRR>Y)--l2KItg;@>kn& z0{K|ZyW(-`wRVxUD^zX~`H~06j2E16`Lj)b3Nu@E<8F)n!uc(JK4z57RFXmWfEt)YELH_KO_cBk`c(B1x%Q_yS}7i^Oz z^g@%`sximbf3r{be4eSUuxy_vx0dCXt9f|X*TfH%N7?oqS@B4D^2@V*=L4oP`*G$# z4}4dAR9`x*`UR_gylxt@P{2bwCRVV)UHfC%HFy~?PGqaZJoo&U2^wVC{~W%%9& zbR|BD|2i&>LGHT6*jo1o<>l#o+1=1*LcSk@e&(uus$=RL;(Awcwld{;$){q%N8dpe zZmeI88aqRJ)-K}gmudJSlTVJZ9R*`;P{|-N>LvdT8}yJ-Tu&hnf_>S28e5dFyZy;! z-SXfmYhK6vEupgQ8ZUX^L&TTke;cDu zp-W8lhL;`lTAy4N;voHA*oN-Mo{Zb}sy_y?OYQ@|I5QhE{(RiA z{pA-Kvn~|kBYAvG=RkA*wVjXfolec6hv&D4wNCgg$GlE*B+H#fCkG`gDrMH z7&hzL?m6iEFZ+A9u+KC2U{=!S>Dy1V$@an?wmxjxK3xwYS8MoxnzIvc^Zf{)!DbW&K_oGjDB3(bV=G zr+n_>s&Z@$InZ3 zzKv}|0S&UV_VtEo7WQ9$o+ymT59JW~xA7D5Gpa0TCtX}ph_j`?boL|2GG`!;!0zjD zdlohp!Uwv#)$#+qjEuB#E#q3w#drGlt)y+%UblWN>JII3l@*L%Y3b+u@sNIEW3`8M zGd?k7&z}2pHr@z3_F0eE;Mz&(x(F7o-8$+vA6({H9RHwoa7gGT(uO<`Hx zyL~y39`3mPJ@&kTjv4&Va5ie3>bPCs060G;A8yCzZ?60?l`jEIF77W*?BxP4)bMaJkgW6>3o0wKF)m8 z#$aTzfvAIiv7(SxYNPdi2kob?7ZW2jt`4+iP!{FX6_(RrA_wVHRc#m9x$AS5cF89y z3gI>&6PAC}VPmb6PtLPGJ@GwHCOzma*$wO-yC0ABkgF7LMW44Zb7@RIJ@aj^L>Qk1 z4)b_d#^ukC6fY#+sr=*GwC^ z()>ev>f`XXU+qCoq^s9fm0^=6_FCVw{L#`Sq3)pXMAz|MsP$XTMqvBaO*1{r@!!es ze6aa8Q+G!^!uMj?14EmT4?8E#Lbu^L=@N#Gk-adIA%{7qSFgP=g>%v+%+Z&a;&+&n zHs_m zW8^R_KM%$ouMXiLKERJLzF*3yP<`It;ZwiOu!m&mA^h3fLfrI^ec6jHE`DU3Z;2>f zK6Cwtm&;B5yZn2>6h0Ti7d~72b!%>Cxc(m6t@w@8Iw#gY%f!a%I_~`qT5Bnx&AQjQ zw)oQ;_$I}!-`acG{!1HLdHy-JeQ}W9#`BXrmjur}JpYjA(kps$IqU$Psi$%_@t*H^ z+Wpsh#vS?S?}3XIz#RmRb0>%4jsvIi%SOY^=Q|3!t{s7!Uk2P};Pmasz(+iv_UxMB zl@Fg8SZdqWHNRoFon7Qk+}8!TLMQ8E(EFX- zR|M~Ob6*zR@8{m$L7cLAGeFhBe~unq45mU-3>_W~R4yFD9C;O7tT z2DX`U9r%*CT>pLc{K^Q=b-dU9w4jUy2jEv#z-P%t$bZR8!2bo$jqr5Ak${HBsOKZl ztyMBic|kv1aAI`-N=1R20NkR{aH-hn{*|h1Fgt&B^-IQidbdd*xcK(s9N(_S*I4nw zR+Bg#U*7B2n{ruGNU#@d9`N4-uhQT>-@^IVGvr+!=Ka*K-sl3a!u-qf@)K7voWG6y zk3qM#zs`?T4|QJ&?8e5ARmfH`e-eZY&+$H-0dK^j^|82I=Jm>61y{M0#J4 zUO77bUtT4>pY&}(dO_d(m#0bJPWnSZdP70}2T9*S`pzJ|xgdQF>AOhZ9i*oV(r+Vu zfb{)AdRsyI{NO#h_=lS_w{jNhKJ0<7THO@SY&kv)nI%NC?y0}l_QR`8q;W2N1|Ns3 zcbxy>%>4)ZT*vnXoVj{;HPVkD-% zlP6z+E@&K}&kXz2RHxhZM9lr$#)A#!`%}Fw*d$+SJk0%h+(+G&jp&2#PvE}T{o=L7 z4Q9umxi5A9+qGrf|DO92_l|3;xIfB$%x$|CeZAx7+?Tok_1aeMpXNU9{+DZ)bN?9k z-%&wYjaq&pKh8KhYW##%E4a$JWcShDYiS?r+x|U$WaNBt|J^6ic|Jefu1}V7KQnkw zJFUG>8J}$8J{G)R9@3vVwd*eVB<=g>pD`zuu9mOwurGt3q^&==fcN286y&%1p;Tq~ z<%Q$!C!xnbuK_+BkKPfUdh4hcn*H;Qz=vbfJHiL}K-Yhs0lfX@19<*5_#+MG;Xl*v z9btQeav1afr9Q7+ier;pl>=KA!j5g!=WnRST< z^F3lFS&!J88+dVR?)Zy)b0=OrntR*&fmvte!|1z0dm6jj!4G_}!TjSR%-_74IKCdv zP?HZ-ex{H{nW?1@D<&{AITCB0JaH~D<0sZJ31Z#C#*MoD;Lvjqy6U^1_G1l8N>>v* z(VV*Y?dIg4hVH%7OxScI{Wj^Z$E(~mbIjyTcbZ9h-x7aeRm+TtLmjslwG(%kATB*| zZ;hF#d?602rU7nl;teb1T>^PifNiCHa3QOoTE?-9J+ z)1ml+3;Z)Bfh`UC!6N=;^QTD@-sfrUi~BM+Iq9ihz5&X+^K0g?rpy|&t!t`zFX_W` zAkt&aiKmBD9`7qCD}#&?OJ~dBjL+Od!F^111o)m8lwU@A|C$-LpGDl{JIFlYd0`F9>?$gbQm-Zm%5flsf-+e;o zK4c=%ho64Xls-*-!Xe6f;SuA$aIYUz1s!6|Qzi{HM_w6fp8SWQ=5yW}YBsqc+L~C0 zZ;LwSt-F)hzza+x?R=m15hT!m+`r$ypHgl66>Xh!wQ&wa77Ld}T&>iV7Jl&L{dRBd z7RB>$wn)+}6>JE%BIz-?xTfmB!>RFCoxMEEQbUfpqk=e53>7kbNFNRufdr9PFGKpSm{{)V(dQ?mp`7 zr|wN7b^qg^$EmwNY&&vsq2xj|AFlfrb0PI#B7Tq4{vF`3y#R-uc{n@-4m-eMdmaws zwSRkvLs-AsEgS;+$FG0+mGSByp#EJ2_3zKCe>e3HQ2(xx`oA+C|9ANGf9sv-KW!ZP zAEfRB1$94{SNF5jeUQ2jC(yKmz`*JE9PGa1lB#T^wVV>JoZUnZJ?{IQ%YM*1Xke-rU` zrF?Jk`YX{x=_*S%rjZ*KDcJS`4HoVdC9Ore$qq^RdbAmQSg1wxrS6@QAI!tXX1grIk zW4JNWSbJ#Wj@d_e?uUlg zbKM(@?yHHzmozbK*jSmOhKEU?QokkAACysgFMe`x(%C>IoA7VzUi&eU3Hx31gF!iK z-=Un=cTvtFY>u#;?e9>Ir9W*t8$O&fo;#@aH=B90vU3^FRuP|gtBJ9nu}ph>_04i` z)5ab6yoaS2;x+t$WsK3%aUt^|_f2Qv3bCEfRvZ})8HP`U{wo73h!%}XP5wP)0x12>uVt4mYu>c@?nP28P4^cn7NrBBCo&TBJj&P{Io zQD#YGR{k1?JNb;@ZUN4o2kXOa7!2Xu$)|56eNjPrVkG@9%0G8>`ucq%>4Seu`byHv zg-6Q_;j!+R*24R5J9R|3xRd|v0n<6UjNW4-WxTCAS_{&z8cBa^5$QLLPX8a7k@P=J zBmIJc^oEi2H^-sD->)4>e?$2%8lC^|n@7@5j)UJf?jK42W19S*8J&Oa%OmN(AE*Ac z9~?=4eIEJseaSo?t&NYQzoz`+bzb_{myD$Uu8Q;z7No~U(q9#R*N;yB+UG{nk1i%X zJvx2OwvqIg(i-1^DYbb zK@6F`_lPY}-IO}n@v0xwKKgr)*eN=POnI`3RbZTrDi(qLC$9TIZlJ+znNRuQ8S%jy zKy^Fi-K+9wpBKhszSH-Uh08c+ME0Zq?Ao{&8QP}y@ys{AN8Z{DCvf;l?_zrf8tTrklXT)Bhtt0iq*sUOK|Y=HuJhqk#%-C7vL@{_$t)!n=dlZ8 z+ULL;h->3$zzZBd8}bmmf;GF3@_oL$?EaUqZ2gNSXX7U^hf&$K4W@60;PuS?Jl*TE z^xBJ_=NkrLKftEd85mJFfe+?ZKQ<6vR|?)+r9J->&%hIG#*P-j`Ldono|oPMTyY@N zWtbXY&@Ly>^vj8 zSpCY4vG0R)Od<4lXJ$A0L|^SY&?(Jmp(yYJ23U{yB#RnJD`0Un?_T zKK^?9t~e3$Ep_tFO5qdKDSBHuQQLTj3`HNY>9_hYvePAN;Ph$Xq&`2M99Vp$e*=2+ zoz;B(E1JiZe}v{&q(eQII@!K4{GO%of@KZ;Hd^gxuXT6r)^6=C zwbasnu*JRXx3(`-RCMtwuGFQxb{AYE-|u&yb7r0yl6kQ0zSnnsZS-NzbN<}tocrAO zeeQFg`<%z~69?WOSTaN5eb+5)3;b$SK7>7A--bBkEuhTO?dA83D%lV7uy4sn;4>F^iGla!B`tBhZBnUah1@O`FD?MxT` zc<%=88%)DE`AR?3=7@UhFTUgTrRHnw zVSM51c=sgpMefRZf88#TC7JCS+|Tw5*L+mT1T9Ci@qH2P38wM!7wWqS@ZV7NmOgVK zJ_egU2tGI#z}fWd@o0SS`g=4jmZ~}GOP9-7?1gSF<5Y_KV-l~YY3}-a*p_S>$?h-f zyO6#f*fm~Rv>~-lWS_G8>V(boiyPlLqiK9TAo>O8Pt~V6GG>|M7(YkYe11pu+v)mu z4-u!1`h(eZG@gzRe~|jMekJoABrzxX%&lQn#u_3<|AC(ljy<)0X_ac`4H&foZkt4}pgug*WgGxhx4 zdiPqMBdCQxN^xcN{*ZSvbGv%k{WHbi^@sl(I@K3{1w7yzX=5kxTSF2F4r=C<-;6$HC)4Be#jNqUso=u#x$CHDLw4GD^>ci( zcx_azOMbp*KIRL|HN)Z`eeLN})PLmtFEIxUpMJOT^o|9|>r(kDlj%HVoFmlOebJnA znKo<}JcTjx?nD{%X)5$BoFhGbO2OLxQ^ZX(ZRfAEUW~!C#`hN9WpKfCfwzUQcD>Gb z^jCELT=*7#$61c7KGVL9vwpuir**30Y}}#lWZ=l-_15kyG(BYL4<%2hb((>; zY#0~dAHMa&PtD<-E<#5#-%(cskMJAZM#pB~l9xb7P73}@lekw7vgir60pr1QyB_GR z1<(gXPh@^Rsro0<|6osIozHE9jdCCG$@>((q|Vl{Zr<-homg}N+<8a(hJHBU9aU$& zy$##n-8LH!_SLw*Hhjxvo0r1B!F!%#jD5CSu(!Dd`)qf@H@x5n;H!;iRh#qfg-+uI zEeOxZc>us<8(0?l(sgas*5cu6>&0Qu75z&e1%E#IHp_omm#5Fax9!SP->bSiuX5gW z*otkmbMM=mD*&U@QqLD(#oZypNP}-G?zszA`ojI4)dQT*J9%bJkM&Xb?CW)jb(rTS zwm!zXtY?P97$4ZKpwI2$nfxt3Z}=OY%j5Yb-Z8Z0slSr@c#!@8>#X!e2Ro}11C>@> zzPSn=wU&MBwERQFndu*JFAeT|zpbzX01|o~1s~OQ+&jgk*R6_N4pR$7sM=nrz{K)17x?L@o1 zrmaih$D-RS-_=7sd(mF3jW@kenJlzAcX%v>UtjuFoYfWhSG~eB_s|*n&7sQ5eTC}Y zS)8F=I*NAuNb=vMX_tC6^;W>!_zKt0;PZOo7c%$-@p0G&yKBw=GmYbLFZ5sVfDK=2 zey=gOWcJutwa+R>{CVEb$27`pq_q)7<9k$DvBSb{eG#R2fl`zIKmydDqed>g;l z2_B%H?EGFQd1Lq<#Sg}IS^0U4uLRbBq^+4m;uP5US z&1mu(tgk+YdqOAYe+_jNB>}_S%b@f9iuu0y2KE~W3*Vyz-4(HJKD-+M@Qb!S4?XMQ zQ$E-qinc!YHpdw>fpyJuCz^RzgPgsEMv;=o-jg6)1X8p{IF(=IwFWrYcUgkN!muY+;{{|qlWQ_lT z-_9%3{w0$IXc-m5|jY#7LM|k%L zeFun-*fP$C-chXWF*kxXKL!~%D(BmArVeRW^4_2&z#GP#`BySsg@>vbrYr`Y3cxR; zXb?x$L2-@%zWYIvU73jO~7HbmH?&tmk;_pSjJO>|}SAg&XyRNq$!X5?vQ%VkdtfcRe zNm%b%M@{{ZIli_he76igeZAfG#J*dqzJmLps_k2bo3F6js*l}*v9saVbjxrN(ye{B z_`WjsqAAPY_-K)}W^~dm-{f5Cu|@%}2=d{6r14(B`$w_%9?0|X{*QVc&oYHI&ps3cg4?;z6br;iThyNV8=M-tZyJM30PzMH7wS7KWO|JlZR^; z+-KCM)&kcbZ#>=WQ8+Jnl6f%a+dEZk{r><1p!tNubCutXow{l)xkB?e%7^?`Q_oc%^Jt~8BZd8E@ajjrdL|gFzaT$tcUesJT@3y zqh5~b`g*Hxm!3auz=WTv^DNDbV~wXnM*#D2kslZv;I&udbsF&s83GwR?Ms!Gf3VW$ zA6RAwLt7tz8+B2C8Ho62ciUbx2zBuun}J=|TM^99BU=6yCm*p!>#gCry8oEFjjiN{ zO4NM^=BE=1C+~eD6DK$HDx8FtAkTg+(>&hfr7x!XNP47~lBJPfXTiEW3)Zt5)|UXw2JY%L?g|x6 ze)JB|P7!zxcD?iG(087#LHK>{tJm-TKF+`YUsy}>n-i!PWv>*OjyCD~2Q%wGD}Jac zKG|`@DP8}^0DDyWd-`(+Wh}459WZ&YV`Hv_O?DLbQ{gV>qCR}nm3L5U_#3kNcXn=O z|7Mmd_ptwK|7hQ&t+>Ie^B249PAge77yhax@QImsEp(w#q(8y*wfJ_8WzBuK zsA#0q`UHGk5!Y;u*a**N*k^G*ZL4P3i#Y&cYu}_f*X}HW%>jBIK96Pr*_cln$Id?F z`{LLc{62v8^Oy6B^vQS681An-e=hYd_&6JBpKaeVQg(&iKKs}$(2;QVftn6^;Bk(Xf%iSGExWD}-JY-=_T#5_KjtZgo`SuU zj~)aqG=op%JMz09d*j*h_9WOo+T6c~`)CPk_?1OYThUJV_Poe;VBv_n+b$P-AaFVz zum?zA=I-3a(_LrSKJb+Co8Ixnap+S8GtHOR8Ney#5* zC|L@7J=aIxQA{pa7jbQgI@*nF2i+7(9?qdy6EdH7$2Dib^OFtCrH^>L-W^|?3AhhC z+pG2z!eNsSdCHN;*pEz~FmH$JfCDoxmE!(@0Gf7# z<9i>zkFpSWq&{l_E)F!xnh$e9&#x<>uxkez|9b=eZ?wX5uxwlB}-ave^`tIq;$E3amq@`tBX|uW8-Ztl- zcz>XL8)z58yKeE6`<@fNYwolZZ}FFOLb;YfEAL&lo^{q+10!1YO|Q42pVDJcM7xSg z|H#LLUs&(0R^FcLJoS9vnfFF-vf+)O##zzsgKq>eZY8WQnddQQE2eU-1U=x??&m#C zOyiSHw-@jiWQwdwct7($sykGHyFz1+fh}ey@PNBBw!FLjdEnJ=-3uSD`@N4sZ%$g1 z*;nAWj$y>zkN(Ns5r`A~Q4hy{vX6Ejl&$qvk3PF?2JTy^#+mW!VZW&o+h^sxe5`wD zKN-XMqdx*I0xtJ`lE2t$Z7bYz3b1|NeO6w*)x8e3bkwQ#xma%LzBK*;W2zeO?q9*z zQfO@V%N$RunD}5`h3oF009P+L$BT1_;cqi<5I2wqau=wPY4p=cR=?`yc+j_qaLt49 zDAoEG_E(8Fj1ThBpMbc}mX8Y7E2s3>ihm00OIE+~u7QvDlw1_~wHU~HT5N-+%hra@fcVcg?}MEC9#1ISO_*qJ5J+MF{uKA9+ zg*;Zi6*$KjzKDFs7;hfpc2B-lX6ndpPX;c!j!wMr;qnzk@M+w;Auu@g&uiiRC? z=P1q|eQ?mIk9$q|pOwxlxBtMh8{eCBpW?5v zQ^-40=PgFwnXK15j{NH!`DL$zYm^-MXPf-wSJZbEzXweFjqDw4c{#~C(eCM#_w`l; zc8Zsi^;Xwe($3E7UQY5?WH@9g_`Gvx-pj)~C*%GQ&f~yIwylP37JT8`YFT>5PQ71Y z&b{gN;Ixv)(`$bM9X_Q`ksi<0u^B95Q(7gA@jG5>k^?j5!Alhs2flRp|d#l0n^|95_i_l2=POGndV z!S~^jWAilLplkSFfP5~5UoQ6h$4+RQ?Mcde;#BrV2)m2;-QZ`rog+VQ1J0j8*>5lp z?UG5vnRJZl9=>y~Mcb@fZw0I!|M?QrITlQl`M&y*`r$g9z4CDt9O^O)^d3dkp+!^=EmP2-`gwG**Z_ma_SF z9#M2;)|1mZ8&9vf9C^ISJAYn}u`xFL61D-nHlaLcdTM@ke3O;&<}v)o{a?{HGyOw$ zVsGKadaL72&YRGaMz(H00UFQStLD|-U#92N@S_}46(1fX-gS7k()IH0owMD_hwLw! zza2v1kvzcjBrvA*wLgU4$@qR~5q_Dre$IndS=B>%ZTR&{nFq0~c_gnEc&JaV2k&Ff zqD)9)oxJs7hVx32)wtJ9&1EN%Zzu8q!*#BI(_WK?ytjt{SM3CjkBAqYd7wh z-u(*sq5Fum19AF(p(4aR;fUk6;HDw&F0A(hjACvv56hGvWuT?nD>K{A&^0u*KFF&fzwURe@wpD2SM9K%Y6W^UFA-`5Vl3$;k zu6PlBoerFODBt(gSPL*$mf*Jx_Pv?gkAilg_i?-^$Dl`xef-u=oMn3c%A<_?!F{V9 z`axIEISD^T(n<3x?8m$-u$Xdrw;y*qrA@S`iChV=)SLK>+=X1*6XY4OYTi`k5M}5u1R*9*v&Dk#0 z*~~i6Syu5$+#hw)Iy3X6b-3jHq;=hqZMci;QEUCS3Tx_`#|kTl^KSba)&scHhM%~! zoN{l?GoGGn`f2v+&T^TnyK(*?crQu`pEv*TY+CX`c|*|#`ER5`c}xk z;k#s9yG}!SkFy`iPg^sG^G>AN*Y?DuThi_O)4{CvCD6VSJ)ZST0SIF=4fPkXeWtC$ zzM|%(k8utNEL&oy#=@)G8wyK%p)ZRL=Nt?06=fgxkf)nAVm>S&{Nc{}W{l^wwm@Me z>D-ZywYYUZWbLK!_vYD5t1ZlPym>E@k_oZPPr#BwG%)P#ywgX=e)yzvo%@5F)tE)207ll zLV{16-BIIxen0qgRO>(ceheP`F?i7Je8qFv*CKy9bjN0{Pm_~>BKHpfAH~1}?n(WL zZ+;RTeT41I6W!}p>RxE)_V4_}yA$a|Ek&tv32;ZGmZ^9D}d{no(od$08v9jlk+ zyq%LSp-R}jfZs5WS+(4s!#O;u7k!s=Shx?%;@Z*dGm(NPFh#BViFf;mr<{85)`yGOk7>KV{1fm&`s_{;>uoh3f(P_^+rZ-Q z?z=srJG1ROuf^I=$py$*MPro3qCcPguLjM77pFg;{jaMW`Q7#Bv+uoS@{9g__Pry( z-z4C367i|<_`m8h@aX>_c>EXG*I^?DuDF+~WHjcVhyN8ei1VD&o+h1T?}=uwk19U{ zx(WRK17^))^l$1tSu{6#>t7=8^uLejy@&(2qa<(p&;R))_7mg#>{1K>>5b!Hp5zwT zys+;8-SPXH4hCRfD_A;;z5KhST;czC3^Ls?KjE z*Y)A-7j$as=3IyD1HD6+!Qf!ts-4(`#X3m#$sV=p5r0I*N7GSiF}n< zkKkCt@bbR`y;f44tHbTfL#=E*Xw#s`-6?A zZ~H06J3=@pzm4sIE^q9g&>syB3m->b+(U-?wnA?S6rRHSmyy2~`Nh8#^r6q%Oa@+V z8(~?}h{``1`;NDTcRvDLWa8bc@$OY?oetCg9f0j+djWT|?j!oux=hEd_u`zYvQM{u zUH41hlQnsu@pQxcEU(LUXz z```{%sVeK&Tt@Vs&e{nX6{E)=>75*dXKFgm%_yPL?S-dc+ zc;WAwwQSJq^GQ#mO$(^o0{(#%K3Pv-(&3%g{#|pub>~5CL)YhRCSeb}{(W8M0nSmh z4U4`}{h4017QS;(<57>2q;KHzj@e1H)4-#wNS&`4$LH<>`6{-`gJKWE_*GKbHL&=b%rkovTt9f||CdLb zCTwFxv|p<68#~Hzp^Q$}(EelxT@GGakrWylp1(Lmt3KrvUOv z&JC2+plse%MW!FlF*f5192ozYrw#06zPh^u{V3y}&(cw>JI=l%x zG$KbW*kLg*VVs(G<~_~*_>8kL(m$?^_RdlE0Q$+mH^!k`iN7-XTCjV&*wSbV1n#Ue ztbfhJ_#PnbVP{Vtp${D7m`$3Hdi0tLw78ym`G`M5l6d;{+UD-P1~kdFG}a%o zriPC_#~<%&36rviaJ_+oVY4P}JY9DT`f&kZ+wj>dfR9xHz6A)`i!}(|p$B-7R^&{B zo;;KIbENy6>0A#bufZDWYAK(m->2doXMu4a0RTGt=cGB}6MW?x=X_ui{dfs_x)1e7 zkf#u9!UDV(;=K~@?Dro0vcCsVh2Trc+x(`+)3s+=FZEcH#$V*;8HmI9wK3i=pK9vOQa`A=o$FJS)S`P*^$8uu+=J}g;+46GZn_D$&b z>mcLzdynz{9nZ`O()>s(oFFZLI!~H9C&&{-o&yu4g^>2t1Zmw!+c`m657H77r1c_g zE!#9fdKl^63DQ1;wCNM1ZGfEpnb&819{xvb@rXYX;-+I?uoCh4)KBof8}Ic?EbE7O z=iYuR;=a4Ywq97`v#vl|Gvc8uto&=xpUg$hGoA*Q{1tx2`3{U#UbYOO{8RF%cpm-t8fs zmgw|+4QH=@FW@_9>o919b+LX8*Yh~w7V9{Hi+oQ5zwq0Yd7Lk9m9?~q>reh33WW9^5t7PpQYbTJ4%pevyQt&=P3p(_7i=`*KJGX(QP|_ z3gt{5jc3R*RpwHKi}QyhkKoQaiLkPH-z|E-tV@AY+PhxT_$@{FfDY3huvdrK56%@F z1M<-0I-EpU?h``%0|?(wTnWBZ-X{^aS?Ar0a72gMu1+03hH#q>zl(6a3g=<0q0b7O zykdmQbhsShnK}&Gl{GoqmB)5X)$yA_&&_GMp7%idEP=0(?PI#gTF|s}US=8}p?9A5 z)9Vq)sls7=W79EzbvB+oDSGD4VXN5p9M8X2;r#1mA}7Hov{@83o_%L1i8Ibh_gVF( zwqYAOn?zg91^l7nGWkQ|viL*AIr!r|=4uCjC^%{U!21RKq4H$%hsu}9A1a?|cY)p~ zy#E6JQ28?XL&atChpK~gmF5qXFU=n+PbPn;Jem9eBHGiBxig?W*(htoaV+DxU{4s{HHvBP09BKYg=NS|qaBsly#~9nC`D5%}HUEzt zXgpns^Q4o@;j2>2^)3A0wckLKS>NgP!q_?F1$|GdCx2|a9{z5)L;tQBuvNgXvHcd@ zyD}a2-u2Ks;Kvhq)$-wu?d`eL8F-KB>dWyJm=QF!FmW-l4DJ z^Q^mOK#veO1&A-yVVsMAt_YsUm1Hz$x+N-LN}h{kjGE!Jn+F6o_!i|O*#&D*E23}I^w2PeI>6{;r|c(i1|y) zia+q9_ii_SgwN*bCC~};jt5=^GdyZF&AG?IUS}TW(Y(=un@-~2*g-#!cT0_Un?Lp%J%dJ%UB=RGO& z4&=64KP(Sv{peXuCr18et{>DGPNW~%C~Kh(kCw@LUKCkes?!WT?$hsv9!cl>**;x= zF8ap2;Y#24{+9Gzk2>7wdnWSyCiHz0<=p7|faLl8rSH+k(~FLfMiqV5K0(^xBXkbi zpwRIn`O_eu&uCgMQh95>tZ8|VrX@qmXCQy~Yq~RXdOzYib)3;9CNez}XUs9K^t|J@q~}`H;YQEYy?+yWJ|VQK*1sCp7s%`VlIQoAp7%GN zUN9Nw;L1S1g>9W>3)=$4-r+zV_QPJ0eGaT;c_+?P&^`S0-Y-n5p41^OuRK7qVX zFz;(mz?NhImzZ0d7Qm(i=PK;APEX5ttglB?_oF!O%`x;S>udUA!@rC6q^$ddMnUI! z+n@i2+4HQV4cwIFFL(`SqCNZudO^Ka`vUn8?JnPry*`KE$5FJSlX>M^XtYtIPL|=C zAKw<9{@_1~PY=$sW}fG`Hy?8V_7vu$u5B~E(Nwhu-!70nhCRn|{+GTk(|upYU9H;R z82-LR)jr^DZ0ro|YuE?yz*p$s_jaN@A7ekez;;%PJ1ifcBWD1W+_?31Z9^N?JZo%d znfjfwt7YnU5|>B)E-g1yoL-Oo67=t|4`>)#ju@L4=fHg_d7<)T+6NH#`)5DtnCB8JcY2f54=PE(Ds3MsQ+mDz&j-fYx}@El!w}W_Rd;_v+M)! zL=dO#1Megej;Q+I*@>{W54`g@!rDIY&a((>`@lOGYhxdHhxP=m2fcF!VQoMA_hN*L z70iEUyQb?%#?PiE11=KQGWFLQpBxIE5} z)L+P7##Ws2Nl^XxH;mIC=v~`_Ntt!kXUS_9Cq5{p~h{HNC&xi*OdbzdejNP491$#x=daJ&LfV_qU%x zSkwF42N2fu{x*41+l$|(Zma42WFf+u-cORoHNBr?yEMI@Y|5nfUmi}=`|QJ%-xo#i z+?V`{y5quOCmz-N!?mP)><sZ=!ORn7u0b^H!Me-S<9Gp4ouW) zuHmnu|6d%-pnuGfur(VSfm2UR%X^h4Q{E%)0(r0UJ)n8lz`Fmp)DN35CT{v6$M84N z4>Rds+V7x$>7$eWe{l%)X!`#J%WC@n#W{pE{hyeMu%`bL(1i^BpD0CG)Bg#|cuoH& zIuX|NeN7jc^YPdtRMrvDR9A*|{D#6E;I{huJsYx+Ndu{QL7f-+vy|69`# z*7W~YIl`L$-(tHo{lB$V*@NGP-uH>O;AdI8G-+91{VdK^Ja6%ijFQH)|FUg2?(Ra^ zMtBfsrpxedD<4OzZ2p7X*M+YU{I8MTz8ibp%tKn_qxSOuWf{tp0me+_)9^2I;kPg| z`B|$LWv<`-5AYGyd;Bb8_Tsq@PW@?|z3)++6RM>Tq?%I}8~efInl8vv#3IKBhC zWO&Z3xyU!{pP~Q5p#MME53Kx4X?uZv>;P!2M9HG#0|;w=I{pB{nxBr3BCPr8_|ph$ zemYJ%*YnBo7ZKL{bo>OunxEb*Kv?tBo5cuc@za~+L(NZb`ViLq^ky@{nxEbbBCPr8 z&CLjFetHw*ZTRU;@}lOaH=jjV^V6FcZ^KV-vR#^=-aM!H=@%y&Pv7um`V=8;I%(QG z*gNqW-y%cv&b{~X=zV&D733ZV?^MRVy_b6#>Am+wa{siRSBzZ#P3V87rfD;;IQAD` z$GAE4DU9(S=947s+4&RM8xCRIHT}PyL|D`R>yIO>>Hl@oyr%!xN%NZiUnk9L`hWcx z!kYeHKZCHQ|2HVxHT}O)f^Zi7zfp-eP5*C@<~9Al(TT98|2Gl{Yx;lVUW7IMzd;_= z`qUeoe>DBSaR6aW|8J1yixq#r!FFl-|JSLC{@RyC3KfFr*(fsi0QG_)=ym}I0%@40}4$%DYnvJmLhu6vx z&fJg{;;kES$Ykqhwg0SX?*OCZpet3;Mp!wl7jJ4s1*PcaK^TTT|A*}h~wRaKL z{BVrz()@5t@1eiZ+<5xh`!1FrzNh@H3bOd&>9owBd-H#Samq}BazK<3mtm*sc zOoX%O`zU3krthOo2y6O2N?O6j~+)@ z)Av!fOVjr&^j~$@i(czZub;2pBl7xU{H+wd7fwv?H`V?3()(eIlS9Ax1HFF$d(q+h zK@XbV4?m5truW07aZT@sN#mN{50l0HSDK!ddiw#39d* zkj6E=ABiBW>HSC&VNLHx9za;r`w{Y_)^CnD=UaR)&OYp%jJ(JL9~3#`s^c#~e1VRq4||c0pM-ea7i8I; zmSv4j7oU4y)guLG<|N_ch5gO>N%2iTfOqAaj7J)q&OFo?sY7C&1i$>B z4x9UG8c%!3e+mSFvccI8j6zOe}Br2l-l;XJ9XeU+5#U5;FSKL z-iNFL;AuMY6(e6U?^nkdmN$<5^ADAO#H6E0x6v2cR*Js57k>5+bImo$i~KV<_5%$- zF3xzdZEP#sDQ!gi*fxxJ!4mt%BEpe2;rs#0eqz9vquk_;1G|=jwg3#}X6ka7dnPp_ zO2!CjMU7{_zl?VXRNY;W(0D`K5AFlr>}59ahCM<5Y=gJ@KOb&XcoUpmrf`P5GuZZ# z8A$h?AK>@EMrLmu7_sY{cP#^c)>|`izP}K-W*@GTwpwY0-UfdZECW4k{rtaf-uhSYjXY*q{z5Ci(^BL2>G zX3b+I2pr6C@WLk)FL?HmA3q>3%y95R$p_#C z!$Xiep2JGs?0tdwguLVY+X>O`xTo+V&1o6*y-V%|jv+TFzicft3Py*m8NAzLsws+yXg`mmd>f7dJ(qyxu zZP4wuW%%x8S5XD%(KDRaFz;T-E#Pei?=#+-T#NZ>>{*N*@54*e=0tObrcHM_c3_vH zPwPpvpXb{+XUxQ$QOdDHxR^c=jc5PyJEU3E4Vtx*XxB|2a6C&K<2mmGjAvw&b+5*={~+_jPV7qy3JbTBfXlvz)XJ+$(L8EY;uRnGS)L1hA!{iv*11k>(1pLMxFj$ zozLulJfPnVEUW=MGl^dnkMmNhPVUt=>%5b7+%WYt9VdI8(9@bw$1}R@ME<;_+s!)9 zB^uVn`177Zx%7HQ+65g``HPwTibIk|{KF1SM_8|C4*3w)>zPArqh8M(;+jLRXAVUW z*6W!=!wBp3%ptBh^m^tHaj4fbhxQ|!wVpY27;&5R*quaJuV)UOLs+k8UMNCXuV-GE ziLhSJyikU)UeCP1b&+1bzYs)NuV-G^fv{fByufzp^~?)TDtqmVrH!Yjr1$?o@y!8G&-u3z>&7Uey=Kj3O zN7_pBr^=V+PnGBX3;0vz%j8cLm&u>1JZV48pDLf>bq{fb_Ga>@%9F{T5|`rP0#z>S ze2B`E=1+m`+@C){-qZYffNOlsp9j!K!=DEpLRj9uo7X-p9h-}*8F*pyr=o|AjaD8=fQgs*8F+!afCI0 z9^8+x=Ffv{m*&rdClr4kdZ6+2r46_*q4TScfH(J1=l|wgcwdXV(mN4;WjpStM|iEC z^V$FXq&d>~SMNlb$E*VE(PKaVo8Q15eF?%g!cS~}1^fB%8`Srxl+FK&-p}8{{rqp< zgMIs{%tKgws3#-74`s>#Vd!>H(eSu%n0;Jc5GJ^u3d$4<%pYPj#0`UCb! z3x|hr_rM-Cw-5jQ9NwK=0J#8}el_Obu`#X>Xft8^cdo_#qKol+75M$`{G-V8E8ahV z@PT^kL!se8=%3s26XaiW=h~8emUZ`x8)ZCyd~j-Sg%9VwM=h(uZ+UUh|GHzcanIvgdW8G&5fYv5Ahx-tm&|xy#ixd z1sNu`NysPU6I;TgIPblq5##+Kzsj5UH1NiIUpyEO+;!au`v34OrqPxF{|*n@h&ygT z1DW~u0>=9)UtR?Hq|K%t-KInJ*5zk)n{48u!lFKQBkvJ(w9hI;ywHmG&l->NJ5MP0 zeO=CndZ9~04^;biJi}g#x;^M$t=z|fZ-o!9`RHcglkH6H{dEFn#j&w5>314#Si|Lg zXyd@W{Oh0_b+y)KhIjZKe3WwDk|3WIRK*y=?;-Q@4wab2}?l`*ayI6bd10b<4Zo_@p z-+}D-F=WS&UsvbB&Ar&Hi;w6Vu-9hoO^iY==V2^yx7X(jlRN$-*m!;{U*328Nv{dh z$DR3*{uJ_+rQ)&nNbb1rCG%eSJ+x=XpT6XMV#Tv24rO*StnSKD^TE>Rf4J7rk9Wrp zgOH7KZxQ%9bw57fQkPtB+V998X*~OPKh?Bd%C=J0GJm?x`;MV(2L2uSjuWQIOZkAZ zNBK^eyw3(>4}0~~etgGFU^kxq>yJ^N!nz&nr##*dRm{GM4Ez!7pilfT0e$dMsRMEl zeNGY{*N40>3pAQq=NlbR#)Ef=p+1g@bM3};TY6mXO(b{hc+s>MVZk?K4&|bUV*@() zP`&kWx!<4bLDXMs`h&ilV7n+o6`ua2DGlr1dWJE-V1BUnHJ<(3K9*N=b z>v!M4nTfys6u&vnJBZcX_LSW7uW;hQ{b0Cb(clF4`EUKikAasT9N$`xZ@nGGJ<4bQ zejDrvp5bdRHTPKimiiQJc3R+vhpqV>{|7P0%N=7$&pxg%AAC;bx&OL!S?FjlIr89M zXLWCI8vi>^vR@haAMd`las0b67vO%xWSO=|WasYZlaLA5JgRAr^JO05 zN)gw`u(vu{zOxIm0p~N&rj)M1{-G`0U(Ca}!K%qUfn=rGbHN;aKhuRy(58v*b8y-d zAUAlv1K%9jx`Q+&^o0A7mf6;a(O%0xyV?gCTF7sulAidT)ZzT}H&T)2U5Yt(xQpME zZ}=JRu&(R`O!L%RA6w^zF0}gxnr@IE^P1cn2N{id?wTPj>!%^_++;q+Fe!IFA0XbP zFOGYhO#3d7KbU)yd0Viz0h##-^wF(y4=nJ#<<#!Swtxn%7P}?V%5Hs)-?rR>`TeT* zIcIyTx9oS|JHviSIK(x}02b!^t7c z)jqs`d3gH`&=;(>P7Cn-YCTtP6+gOctL52tJ#=Y|jkj^jA&$+q4Oen%qp)|Ce@#P0~_X3_fqvjORAi3>g)8{!1zc7ayB%Pi}|{=#bC@Ra<`!;{Ys zAg*%wVAan?KI8lN$mgqmM&GO9JnXM@e|p+TQ}MKsIaf>@xuJ3MNNub5W?dw`$(kvd zH;nt|vgvI&x%;ur zaZ^fqSe9J+6`{Mv;iUimf3lK49!`=T42{)WA8AO*2nSyQl;HCs<`WCwdOBBc{gFrW zt&cn+_caEd!5Fp!(*&C$*a>%|4je!y`pb0P3D#xe$0BN zv7F$DdI#rr$K1kk5INnO_qAoTpW~d~J^$mXmqzZ({~EvTJ3;!>xzn%Sn>+og9WLpc zUDE4wr(f-s-juuibeH=r@?V{;LLD(p~!J%AY%P!!LHhuUq?y zUD{vV=2E{4e}2pbzgN1A-+|oqU-?w-bl3J*x|Fwbr(b!-CEbmFkL4~uZEfy!H~Rnh zvo7Ub_~YX)^zqSsF7OLn(!IIUKlZLm`pMksADx~%{bMfe|A-5JxzYDWp3GhUN19yH zUHbPCxAdo7;6LD!o^(lf;s1}grO$MMUz9ujio-7HdtK69O1RYjxJ$ZQ`G`w-7y2x+bC>_{DVOx4 zF6l1v`NO>~<(pm7%U#lobEkjEg+D&zLO&lm-~#`p-07FQ(BI`Q{QaTLF7Vg8r2Aab zUFh%fwJzl=bEi+;?~?wcOZo#Y=>xgbKRh*ey4(0)w$r7&3w>VZ!k<%J)Am%rSNex7kDzsDs#_*+ooUYB$i`E!|D{Vwu(s>}Gh!N2U3OZ#2; zbBYUpUgkz$@8+)G4gQp3m-5Nn>66{kUFd7F3;w4(o4fug59Ch&t=re>0^eo)3XkV5 zUwFVJ-G#m{-JHApmfOHR6^A9hJU>XQDVOL}ka^t|=C)AL`-ou21HA9-tC%2(!2_at1>n_SXM zT+)kjr(5S-(vRg%_qfatmdp5f%5uYZE02BKock~M4tvh@F&FwAd&Z^wLoVq_mvk5X zV64=oyvz8G9daq}B7e@0<}QEU4SsFz@?%qTr+Zw|t>d}NkDbY#e*RgP^aothy}8rf z=7QAFx-q+G`oE8W@O#1O7xf+HVKL!TuW)cDO&B z2>T=9&xY)QSacv1iwu=A%^r#lA~6sd42JC1+NO>^f4F~MFQV*3Z^-TrM?!WW+Mhsd zxW9+FV>Yvt%(lA+`va`vR;wkHhz+6M>R8CXf%SJqV+s5=^z=t#A-qR6`G?}Rd9@PZ zKE&dqU-*qPe>@(FNo%|P;mBYtWcw5Lthik=D_$`xIJ?wN#KJv2p;#zr&l*HR#T47V zaaR0B!k98;R(#47%VOKBT3hQ{+TeSp>+jO-iRt!*b$k5Mo(}WssDC-?4+RNV`Y>O5 zG++8RUp0Te>Wq51)&66DS1eq0hh1T#j2{o&@2nV}FrF$rQ>LJ0wm;RwSZDyqnTHk= zFA?HAof@~hLWxbGP`@4V$JLCLquRu|@h82|b4@M%hEo&AkSv{Drquq92s4psGTNjH(V>S>PBpr0eqJ4JI zpFk@S)rYbweNzl%hV(?#nX1y_q0k1VfwUYY+j=q9BuGWB;kex&P1y0l0ip>*(cZtI zKf0-3@DySjP*<}*=I;w7LNTEN8)d@%8$sM0xPGMI#|ro(kuHCL=*0r>(ZozL&OG8^jO;r=)KxM!T#%M4Yj-owX@u7Gk)W^!$ zz%)Oh(p6DA;2%hkaCO5$k1D%giksA6Xk$1K%1nz6CI*0OokUpi!9Z{7y+QTNR)AD4 zyP;O-ef2=7U)l$593Y7WZNI&$y{QS!F})YQXs>Np-Lbr-?o;h`t7_IMUQuzYTUJ(q zV=Sv34xRkCUHgK?O|8`k>tDRD)bH|(_ttf-k}kh^XI`sy(Lz;j(L$Af(L$AP(L!sv zPQ$OH;aAe|>u5_&ebuT}bxnZX-k%zOyMM5+3j+;O)Tr$B_xFb)ah?fC_pP;RWph&< ziaO$I>uztTsq0u(wXzQJf+vkt+aDnz50UQrkyaBOjEIyBAUYAU`@)-1Wh6@KX^Tc7 z@cLEWj8TZQE&*E`+Bl1}mkmd?IMK_>ket~D5R$VQlsc*Y)V4H$W_A9AKh_gUC{ics z`8PsH`MV+^(n{(jqiLuMX1%J60xo08cT_Mny_YCKFYNN2H7AllQ9SrN$LRF@bU2-zjX@|vpK z>mUj-rhNmE&}Mm;JlO&Yd5nyTW0*jwD_c9NYMX0TqGO@%?rQAuw*2?C(6?T(< z2!panWZ(p{j&-Ya)z%8TZ1b#n<(mnkVP%!Apa;?RAV3BD{dTlJGGqh)LG)o(&^AMX z{HATQf^)mV37gHL^i2(P@1}YEfq_Aj&sq`c9}M@08u}BV2 znFsTIP?d|%PV*AkP(zd4XoKlf4`>rYw}H$hGQ7fGHQ3i24FliyGJ94SlNv;sRfC6( zryN+0hjRdYEv*JTx8Z5TL!rMC4<`gp4$XKzg@^M3i(^8-ELDy9DL&xGi~#ulE~{0C=i(jy z$krd@xdYF7JU8H3iib*1C!SI~^YF~aQ{x|qH;J@D|InD_Xv}gnW;q(O9F19y#w9uwv;nJ|aTggI;`%;7U(qTQ)uTg}l;(lFgG z4jpj22v0eloAE5h^GQ5jJWDV>!2d$ve<9|^g~+$C+^X9g3Je0F^`Qtb1zH3j^0yUu z4giy_iKxU^^+5YZe0zT|%JiDS1bAg&h~Z|aV;r;PVGIiXRuUloZjVL=`()HiSdEHq zFG8iJ?a*SGQUH>Nb=S!KpA_+IpjdaR{`y18{995bpCw95L*FEEehy z47Fo{0}!eA*1;}`(lASyro+-V9sZmne#8+bJDU7XHZ^fn?M;{>#)K(qOjzWluBXls zPZ4DDtfk_q^WfxBDm=>(u5^TNafCnN4D&_98Fs`E^F_z=D5(ikoS3i?JLcWzNW0z< zUK#2G6=FfB;o-d{L`^d@kD`opo~j^;G5wB_NyPl5>2%!6!AK%J5CIjZ<7&ej!$F~6 z9XDq_B!dnc^2>OKfRG7D=c$I?;(T8nNcf#?)#Q|dSs&W$$D~RUQ}WBMNyJ!yvdnJn z4O5~?7>vO_OL#>)rx7LhbODipx_}C+0xGNuti;^ix+$Cp^m2~H8e>&xGl5FDITqSz z!kY0_e8f*im#}8;m7!qRuZ6^#HEUo82umMp{E@(5L@^|F7>EMl$Eq5;6`adzErdm^ z890KUE2_WC~AxL^gw-0y_-40q_cG0XGH8-t&vcOz%XU@Q{N$6$T_Zc)JkVC z7Kf@BAB=U&L<)I;cj(qwj8TsZhGf{1c3Z;xv*(!XX<&(u)-; ziXjW?s*xpuTFvQldI>llWRX9FEsAS+g8#`{huEsX0SC7rj_|ghsFBK1lPr1Rev#o{>(wJ$8gB1?Ntx&~fWx<3=< zyi`83w#lf{hERb%iyjC+7?>?sXF_>~!VbF2UgAT)&a5Nd7E^~Vm5< zfut_I(-qk9gg-GDx1n0c!Xd1xv)X)N{!l`yq#D8sO#T&kxBCWRwdx9`tXO3>W^j8! zS=l^UC)8Ip!@kn7qN-t4$I7a;sj?bB6V~M)Ohf}1v`{SFzLjJkO&}K#fTLYlzv!~L zT9@vJTU!R87X#&jTSs0pmO*JuNC|ByySYsM%0GGYqJ?GUpIp3Pad7d?pDe>KRIIYH z(iJdPQOep3KqW5qS9Fz?c2#sOD5dSHqRU$v90)?QuIMeBSB@|VhGE8w@a4-wybKO7 zw4k(S5ENKZ%6xHXP!TK;E4s?nJ6Q^#%j8Yl2P?W3%j@O}zltBK@GmG8(CP9w>j(`% zr>7u%QY8b#LKOmxMWrCDSfZk9N$KW_u7#yT6IaK0baZl;^pSwYrJ$%h?h?~ z@v=5eFBu%Q#BfyC0`iS8RM&z{M>p$?IgN3utD^M7UWKj$s`ckN^JgQ+dEhUnN}@d&@HAOmpiZy9PU3 zGh|?q=g7P@ajO(&pCkY<&Dya#qbmteqWAVV6{K{00Ul~XeBf@FQ)bU!|K$1>NM^K(JUgb#NQPNhPpG# z=_gz3%n}3vCcw!@Bm{rA@jcG5;pDm%@fQZ7u_{!=lDAowo_w zM)8TVI^e>#5P{t=aY0^e#;JWW#g}F=sa;WGewaA8y;f$=)% zSX&?%(%3h7Ntqe>IDTz)Yunme>Z)pL>RMYn+NxSs)U^TM&3^20BxH9`k4xIFlv?EUmR_1ukT|i=*Xw;NFEtnb^`BlmBKxgI?Or3476I18w@+f)ds5>4%w{Ktq?Z>@TAjcfh8&LxRIV6@7yt; zD36LK3InpUL$TKbtL}=X4l((JZV!hx(LV;bSAHtoIt7!?g2Y2x=C@VfQex~khO5`!g*!$7R`^x0`t`%&R3wB*r8%NdLr`zfZGE}8w&?mXIoWuQ(Z^f z>eU@hVb$$bO$`v-tJ+sO-x1r6oYH2KXLWO33oM+gSLyiG?QI>a zmv^kJTe-SrosL_zxP<#ZfUei53?7S@9I>CL7+zfeZuSf^7a_C)Z4ZHtCJY;-QHEzz(u^6B;~ zVrs#}*sO$g4`iKrVL`yhh+x$*q_UEOdLp%GRL@E*&`<#^_u{!!)xwRXo=A152RnYL z`9BiHq`RUi<$i||=fKl{3wgncy5Z_Q0`^!AM?I#Qu--olAx>?h=---XL`>d{XK+zB zHX(GloD(eD$z5MvgUo-78%Xr(I$-e^&lJha`9sfGe6Q=*NfM@l))RrZfdd%dvEwLC zUJ|Ak0_@t{3z2u3jvVi;Py{hG_Cz@MtO*Aby$l0E4PxV^GT9SZ=|`^3+;0IGyswTW zdZYN2w#kN8SmFhED^1r(iw>w_3=hV8^^4?d;Vx^eIT~N6%5i+F#nnc^Pmi~G4WSQref`j8LN;LzIKnC60$K$Tb_7YB9ct$xkT?mgITq!>AVIMhTv?H^|3^$qlvRIU`~|&j@o3; zpKq_Tr;OX;1xuOQK0)e2Nxj{kGKC6bSJUWVA50zMa+D8cTclDTE`$`&uY zxzt8L{|o%Gc*~0F3?IG>AT8qEr-o=z$%1*<(Lz}3yFd4xQa z4H-yrKsF8dY<9MV8QDw&YNKkmoe~MB2QcvoJS6GFH`2st>9n&r*NSG* zOZ`Y`^4g3-i;HuSY1XA`5h-?;jQnDD$x#4pN!2l~NoTxPjaTLa)RAp98o!Fnc3o`0 zMXh(q?Ci7TcSjO&RBKeF577RMGC5G>gnu#Mv-9TwEqG)*E(SFQ?nR=-ibuN>@F0`* zfbm7rbf2<`C_kit$bgg~h^fk@%aA(G4=7maJjO8A>)!~6BKWCOthX|St4PSIc2jNv}wYM#w>&3Y9&=C6A2GgC`ve@5hD9{}>&Fvk_>#ArM zx2sn+i_;bDZ+!z$;OXmTBD0nTSQA}%E(>|l-k{wzFfehsls!S6zQAS(jT_1q$&%=@ z(1}?hxN#8s>dd^_<5rKquaA3a&>vIss5O)j!`*VRud5vzxTzVBf>NWII|z* zRG+dlwTl&&a$W?pGiypfXXVk=rILl7fY(;FJ9EJp__L;Q%aq&@8j`Z@12`PQ$+W@@ z+XY1|4Lq(U5zdhCD`k^083qSw_O;oyOn9vU3}$dbsC9hDW3boW&vtdp7#RGl!>R#Fe^u7y{DdW zl3B?*wJqPax_Ra5);83sp-H#(t}*l$bwhyKmQC-;rt}KgGvvWpT^bbZ*eh>S7A3V= zt~8&Nh9(Xj;)PIZ!%&3-NOGRpCOcz+r*doh0Oy00dtk`$+x?+U21d#*90_;DV5Lm$ zh;sKtZ1BK$a0s3f@T;czSe-X#r_?Bm4YqPM9wl-m`c&?+*zqx~9 z{>po}U%lg(@8iPEAc{U<$sC;k9KCmvIkrw3gSl5uve5ruHnF;*n|aJs=vqga!=P!8 z|J68n3H)ZECWYjTMnK-En+1rEP5uE46?S1jB}RcxnadRoFK>Z^OLhD5<=EurzCN5> zQhSf6v)3OBa+zZL131pc+Xuj-Y6leC2#!+;$g7cVRxzqyB*xntYU@_(-EwWTPj?P@ zM%mQ6p(}L*fEoiQsmWy=vJeQuXC;GeM8-*7+F_=(rlqcKRVz*jw>a=OF%75M+EL%I zqP`YKb<;a2>9my%s~T1|e7de<^{S5Lt83a@JDOIva_OUNE^4ohTV7_*MXqD00DENa z0_RBAyTW?Fb@^Fk-nCjb)DHIb4Qb9sJz4a|M8n`B6xG0}@mBb$ZC|-^T?a9P>kdEw zt%5t14=12!dFOe9^SY=_Y{L1zAR(e2-~e+9p*u%JbU`(1tSNmNzujAzwTg@$-n+Jgm7{j`vP9tXffFbCE7T5k8>-ut2P{khr?DlUU%1^KhhRe8RQIMil~`~ei~J=n184O`i)3yE6y!< zf~kP^q~R#IYj6%KT^oVnz#S&L5Oc*VaMA(i6)Zo&F{`rkNuA=4;E%vOmI!r4{W0#N za_S;J<%R?Nf+cX;L${(i8s#SHs@9Am%tPq-RZV1h`a1*`EcTUEl>59sr5kTtuu#1t zZKIb#e6LCW;wF>+<>6R7A={S_9moU6J#*(yMHG9ISPK(<&}{>Q@m3t3UL&Gg`VtJO z7DIsb(Uic9actDfnRtW~Kn99h{g_E44trzbdb83W-%x=O3r8?*R zx)LSSy&O!zk-$iWh3P&V?``tK*MLq!7L3qPd#ch{0jz|a`&*8q{_4Ov>xHg75QRYo z1cnv{FnkqkJ5E3XBiJ>?&fsdCe!}LB#49Yuc{;knf)+{j{L|5>xE7lCm1qjKTVvSD zmojWbNR{B62(0O|)uwN4;RFWDFWZn6P*OqhVazP3zrq^q?}f%y6^S^yLWH4>Ktwtx zMncY%$q=DmEVVj;gKt^o7%%t+k6`}7xiH-slp)^?cEQ|^zWIZ}2HZEptca(g2-GkJ z?>ddh&((Ab`#+%=_!9^G_2}YOqe0LIE>Mv+2$NP1p^2bAjGBYTGjStr!_iVfowNxG z44NKa1^w01VOr_otJ~iLHw-H(`vZ_8jI9j|ZlQ<)XB9FA)v&_RYaoUThBk&)cY*A% z2O<4Vy~GVg(4)0NL1g7Hx07ybQ{&?ZngG8F9ew~{ZqIyis?A6Zz+bsT>u!+K7B5eG(@Js57rYQ znUmC+T${{k>+2va`k9b?;gJHOObqs^3nE%mmou4kaw|nceKZnOZax&xmT!iUvNNpD zb*yS_!RjQmYz9_w!q+nzW+-Zz(J*3t4uc4d)G-}lo_ix==<|R(uCV>4RtIq~ z*UB^?l*OFRgY_Zs92TfZ7Hm~m%ETKNq&GNDzor%%L5LkSL31{jn#pI~oa0zEK-C!7 zI(4w0osce2ZlxPik6&W#rtGcf`2yH)I7HPpKtlqeADOf$!YS)C60A>T zx}5G}(^vu4Cn9^7W6?!Ji7X9ZITs1dduAZ8!||$?&;WKMkq!}G!zE3he?v&-@fI}+ zY54p&-_-qRVlz66ftZo$v+ zNU+(((0d)R^sP&9Z9+@u*=<;o;pP)r$&2T9H#`S}@K=!Q@}L@{C>HvdP?_JxEFQsp z1s7^SuY`W>!$KcF^P;hyTWDrM-kRPRQp4CKTH}v!CblaBn^efx)3*^N;!2Zw#ej{vW(A>EQ+_G=Im1fHgz$oecW%UmF8G70NI9W+TxDE#=f;McRD@o~ zjF9j7*U*q93qE)2vIfN8xpAcX&Q|;<$>~x~u-K~xsf{?JWJtF?F3ilF`B`SmzNf+Hw@EPWmD&_-S8GQho?jUQ`SrV_- z!3?jih96hBzfG<@tJsuQ;Wzoi*qNu|8tpgwPlo zRH35~+du?X2f$4{twZ6B_?fH!TJ+xv{a3C3kj0uSX_6qZj8mSm&=<7rx;mVQH^YUM z&bdt27kso(DcMl7LbeoFVVtTQcQY6pl_a8!$;b62T*FfDxZs0#4^+i^aODuzmL{LJ zP1nFD9a5W8B@H8;mf)0_DpP~2{-O!)f~vcw3@m7D4UA(2H0GIjnNh^`G9AZ-rH)GF z)Ahj&0j*j!#j05W(;^J<@Z-?xSQDg&xO$s=OyEEg91J9sW>&L8XRA>+KQd=3PThFY z76qAMZvwotF&qzfMMCNV5w67&e%K1+7q$$)|Yz01yh*5w}>Sk}%J3 z54(MUce9xMDvq;33pYVbH0B)Gw1ZB_n1^D~IM#sSn9kKujeA0M81rFtlMWlXBJQab zxRRw6H?pvAdff?4+0XW)XMS024&jEsRZtQJhANcySiuW5*5Hm4BU&tsZw9_swWgX1 zJ|#r*tJH{JSz%-Bs?1>-xmp6+to*8y#(On=PyoVv1~5JtqJoM)rwqQxN#FuSmoSy6 zgKDg`-x)D=`%VW&3U$p;rXXTt#((R?!9Hc^u!=M7XKaCrY$(4R~WX-lHZ(IUD5~y}b0UyC(8wAH0R@W&yYF1Q=H&R*~ z6hA3TryhOCB9IA&^23M%YolKCVZK!hWi-O9!|9F9HesGqW?It_#9>`6-u5QSygN2z zS*}An?l(15w^Z?D&wO=#()=d188crrT-ooOuK>;yEtfGm53Zt_4~=d`)4bpieo=Q5 zMo$_36F?GmKixxYoerk&i={nWCuHp_0EVi}u4|=+hndA}`@r-M$8^y#%~4g8w+4!Y z4Z$zgR@YK+FV9}Sd?u}On#l)e)g>pAvO z&vjwiZgjqY*l`w?D_am3dkYrdiFKgK>+Hoi-SVOF7c`R~t-wMt7|DEAN>b0s*`e*9Dn4-YWMP&Pc5EV>gg>#zQOdLn0LEF`C*BdZ; zT*SVn!#A)$J_VqHq> zO^}*!h1C%h^$}|`TC5?LZ&#`&^TNlUH%3xHW;m4+j?=6f7lV)RAo7O$({W;`k<(FJ zPm3j9=`E17W`&XwzsCRnviBz7QB+yq`04JdCXmo{6g4Wg#S$RO(m_FjNIE1ei7YW} z0T()f1PDu70t(`2N7Qj-W(<&-ami?+xJQi|cLO1cI~tcbDj3_Kah=$X%BbUbzu&oa ztGg1=dEe*#f8X~!-=Bh$U)^)hId`pFcdOfLLxnwLnTL0+c?k4eJ}nT92amw5RV7}3 zk=$%~gex}6aNB74DnAT-56kC4$KmAhacU7pEpa&l*bmNV)8tZvSG!#xHy|qwidwDp`K(}SIUZ%p}Emu%cLaubSsJBfc|AE>df9vX$Vu zfo{b{-CabNVEu+OT(0rWUN8IX+!N*BFv4HvVSOH-EB>re%9w}xI>EV8$H_&Q z(UEgWh>UF8tT`go0shoscByR9(eF2Zmt{o-uk`UOnJh~=^qP$ZbOq`uuYVvnFx4?T zwo)9cQ{3G1W-}}%SYt!AMvK9&^(Y+Tx5mCwi**?J?5MD_u+=KG4lDh53&}{Tb#%p_ z$!`GJ;#;05gV1>sL9z{BIs>!Qup=KZlh5rp^wzGkdv(*1Q_(Ry zEHBS`u-I`~^ZhhOR%bOB<+#VfxBJKJAztRB28$|L4#QUGW3tS*T5C%d`kbI;az@`~ z1N?aFX5(Y7gd2T+hv#6^3s26*I|ij#SCnND-;Fat#YySm$OWElG!?m>>1a^>)zTXVfw0V1~E~a ztSaes<*G%s+cD!Xbwvr*!k4bVmS^t4LS;r3UyY{&1&kwW zc~1@6rxO14oA~M;zYpQRVdJmW^NUeoV*#QE$#!F_8C(}GLHC!jqGXjkR{}c+OV+A| zL$pJ@MU=;S+!kRE9>#k;MqliY)qLwQV%Y`qQIP!DEo995_|6R0vk&mtZB}d3=9CTG zMDUdSMXFnkO}%nXiAR>%a|>{K!VEq+Y|6}eI4v88W@AGmzSUwL&%e*Xt|xOdh3q8Y zWiWXoj`HWjtPy~mEd@MPPQq){=c{$Z$ho8FbWMU5QWU$Z9Jx)gI%lH>cAYH zB#}M_|Ckqc@gUsM>nqldE=*4^7{`-kOmK`E7n?IXj6a&cxWHlj%@^IM^k1`qB@!%3 z7sZ7RV`nXv8P<*(6EkzTxK>oeO&rdDL+SW&7p=C*6!Id)5`N^Sy5SDafHU=)U2V(K2 zB7%y;ag=h*L#2v zlk6;ql^rP$wDN*^u~aJ=q*}@{-;&4Lo7@z_nQHOOTs39QxbcJ%6=LZxYhC&3Slr>3 zJ0qs@=1qhFw_Nw+GAriY8*-Ua@~vQIV&V~<1t(ST;XUSe^>^X>6RmiR_Dn`LsduF9uMbNYlf8Jb%NELF| ze?@7$+@V*o5kJ?U3SP=vJgaQ+13~y%4fDh(E3b2T*t&+ZlnObA&3vEAk>rm%3;Bp9 z)P}Vi%>skFeC7I(X_?E)bgK~HM&=e2t-u{Mcs71`NN)YF8l-LE?`p(u{>hbH9RFuk-OUg_f)umCAJIug9V@x)dBg8Fxh2O0RUsGqq4g z)_Qs%k2c7*ZGzqCikk1eIrx$p)j{&mu*H-L%?e{~&|&{Mm>9C+g(qItM_zKpt^*lA z@Q}eJ=0Hlyugjg?T?#h3*K4>Bsh8lH18nr)U{E%sX83aVRlF9OVVDt)58C#wDWw+Vn%LK|=&OFsr$C;cy@G;dA zQ)YL8+{+d-r|NKA&1%1`hc4FUskUx$;gq6v>YcT?&}^U;PRq{bZ{D$Y5fz(%>CnV{ z`J;!6WyLjl`~yGiUN-|f)bVRlyaZ%wAkJKd%duA(4}q*NQ@C>A!;87)@qA;Rbj>Yi zFDbW@%Z*=4vYA421zU%3z+1nrbUdf!Ff~Z}^=xxg#^&OMDxaHd^JRc?uE0~IT=3)e zBzGp>$2{4E8_s_Yi{Fn{8)=0tvs=~8Im=h0rANlG{pG83u&>X$w>34=&n$Pd^mYqL8wggI+ z4JmIncjj|lP#{^BXkkGCzaf|4&Avu$u||7XfDT#die-q9S`UX~y)_+vh<|}v|BLA{ z1EIy-+-)@7s6=L1W&oJ}P|A?y-i6&$MhEdP zw#@^!A&B1oza_)}hrj8$nr99p(g}gu~ zp6}$@Gd=w*kDh!Us^-fBQEj$*M%5lp_xcwP-@bFpE{|EZl^nR~&v8}{rR;Ab*16f{ zmJiPN{}1=SVwW5Gn^-UB<6i%p+h8#mG|&?AzD^8WRyDz^^wl#m2sPdhx^=)_S^u zt|aSoe#B&!;XB=nZB6C&DpqDz9;Xmag=AHo5IP4CX!^cwQ*z9s$Kt~ykuTg<85V5tk<}x0>O%COOR#MiP z!}>2l>u37n`9!Ea+eGV-U!Gfu$E`4T7QPLhnI-4E?EHePSvduqz8>;W<)3K7**iI$ zA|lkdL5$tL_f=WkEidK#5Nfk|j`p+}h3YYYE_WmFp*inL;-!ui<{AS(6Fhyzb4ff~ z&)=e}2g|krXxS>&8lmauXU-f!;)4eqAPj}maBN@CtxNc(7qc4W=(0?m9D89P{>#eC zQ49E+1M`&R3RDR^E2B7Iwu4l0e3qK|Z_bjL4}LsmG>bnw#C&*<54COEw2(%#F`G66 zXkGJ{G z;GM8$f~+_yKEF$1X*4T=OeLO(#U&ME7KhAjeC9qTe$bEwvQJr}W_YKd4y&)|ZDqg> zDLz=k&%$E}g)lHD=iy%&b{{7&l{!g1KHQ?Zjs8RT}2Z%g>)(Fc(o=jAF>1K805vdY133**Uod zn7hXt5}!0hr^hYQKW>vAxDU4rF$KA_aBzorcw=`?xq*;5u;YYSKrkPB(N6wBer z@5xPrw1Phkl)Dvq9o8IcSaX<`Th4|s*Bab4R)^=K#pjPZ6bl{44Sfg`K6nrFZ^~m44sz?U@}uNXe~bl~DP+@f zJ?IcV-gfa{O6{h%5UuFp^h|yaJsxzdGU6(Bw_TL`BIrS(Dj{lYeUurorC93cpFPHM z=&EwO1=I`>zdPiQ24F#=!pKKn;D@~NUFJqBVu$k44Um&&OVJOv?zm6Bat&6wC}(~y zP0yK`I}(c;60vD}W=;-T?^u{}fF@t^{8POMh<~&I$CMeTPvC#1dtvt4?BZ@5oROt? zV0%~;(Wq#12_12Oc@F52NI0w z^9{CV1$ab4l}5_tGOKdvSBzu`^88<|&^uPNs_F8-hsC;j4i z16Ns)-)K$1a3h|z=6750M~8kjS2FYat?oh=&l1YwTDQ)?jK+#`s3J%34R<$QJP7>i z=;|URr0(OM(38vI#at!i&r9G;E;)vexy_j&V|Hn&$(qB3iHarliq`VSZBh|?=dcpX zr(ofjO&&4ju355b{nC;OV-})`tz}A%drd3WtS`s!(PIAN!u9;S?v`Hxv9q?Q!(*xDAsCq{PsJ}3^nnd5h~TNll%cG0+=3X!bVKzxxm8B$%yxzO zvW_YayD?3SVHzH%CCj_Xsahu$4P*W<*qh(O-uz#%7pwcqo~ofpG}lJNLw-%j5m40= zJo#N1ek7c?6PZynjJf!ITRR8eD_~Y^2?IR|M|vM_IrH6FUCBG#I8<1e@Kvt&!Hf+3bGUJ)wC zAvso5B#$+?saeMLUHR}FvfQs=z07R0D_nU|@6=n4dkLlz(%IuJXFltOF)#iCLtgM0 z!ioTX?*&7jr8uf!-5MBLyvE*lh>uLAtuQeB zm!D{10j+3t{PVk*KjLs$f9x~jb90N-S%f9%;4H^tQcQ0(&R5%j!xdKG8&7LQ*YQvFr2cfgRJcEAj?m?5xG@|r zOg;_9Fn3;>^Ia-D`2+S9*luW@qa`8<*pdq>`md z9{cIogq$~u2NkoU0_F6?`tH9dD_g5I7);1{lPuYpkxnx&aMV5TB(c(L3^#MaTn%7P z%V)8g%P@0=^IK-wFX(sEL^Fb2saRFU92gY;>v|r}$*ld}}i$@r* zW%(0n=(EeN?L7WnRfUX2d(^<(*?2dY+nH(JoXLjDBlOzjktAf< z$)0MyAMhY$n|JB~R?}Bpt#LdPTN*hjWWIv9f?N8zvkT;jWNWeQ7OiNuIj?4mi)yfJ zFpIDkFs9`b)1~Ea0 z%(BvgEm4@T;}kEI2_9B~)BTX`2z?p10{=-ao-de+Dz4awwq-S%5Psiow9gC=ME>Q@ z=6N9*Ow6wO1`}n9xEiq%oT(hsa|c zKB+FAcFVt{w3NpnrYFKH;@{}SVAX2)ISy*vXqFG$W^UnE?Qn#Zx|g42aO1DsYt15E zO3FUI)#aa`BFoL;8LL-R$O(21!xj%Yn`(~$4|I@13`fv*%hydT9BhF#OjXQ6@VtU~ z{)FPe?h5X<^0-sJc-W0uYn=CiDH^#61m}9hc(UKZAwdt*hb4ykeoWfnad3~AsW>CU zc!tulX!eg)$#DGGQ~o4wydhXhyk3Q0I#9pF8%vMO{LrfP{9Ykz2H8APw|k*jbfR{q3gO3W6N=acwZk$ryq z^I+u>PN9*DhGyyha=vh$A1Y{tYnF@r8iN}cUUXE|g}2vB_kSoW&JU%6@hv7ut*FGx zNR_>6=i-^$Jr2kj*$y6>k=^C^5stToR$!J)JRem9)IED*af-{Cr#Gl1Smr1fGgw?& zy!kU9ru$;QbMr_9Yz#CbUc^&J z9KT{TOsmjK;qTyi_+~#j7`b}&YeFFpR9 z*wIYpe+VpHi{}Q&Yx(#(5q;Jy8BZQ3T4}(#1bR70M7IRsyDFJR-o%EDyCsK9iFGs! zw?VRzjCD|E&0(FGlh*R#4!E-YaSY=&kYKtqBMMERtPg|`%|w~4CS#(*sbz+V#*>5C z#N?kbS0M1`|Mul@x-{M0E1`Fv#H7BSe%|Dxj_!ZVvB#wxf5M3aPV${>3>-9gNb1mG z!_!VVb;QU~qvOA4KH6JO7-5IdkXDUr@Mk(YfcH zf5GCQ`LpNCmaiyVxoY*A^3a7it8e{97jM{j$)-zxbJ^wL$}2WsdDYdwz2UaZ(8G<7Jo?z< zPdxe5(@i^fHScbD=Gi^ZJ^#XsFTMQA-dA61ef^C$-)ejNZ|}VO-oE|sw|@}%u;ai- zA9sH8>1UsR@#WvUzKVYRk8i&H?%+Sa|KZ1f{q*mj|F2)uz7isWI`F*0iMYS~a?~9V zZhL{ahV=&V6lo$T3B<>Dc|cxJGU#Z~F`(l>$AbodP6qLMe=3NFKO;e7KxcqB7_7Qe zE+`*_ue6D``SUr_{4=&!fUX1m6?7kHC+KxhC+Ocq4us=44Rj6&y${FrpxvM@BBueG z584KLi^zqzxbV4x>lq?#2{3Ud31D#mH%7boUGCL)=IMAq-0B?kmfrn?GbYPi!RfRUXT~ z0$2v(x`1*c4tEWRr$s^_TBbCTJKa2pRzz1sWZIEzktenV^ZFvp|zT znV15F3zg7QG9Gjus{CTJFDHYgu-4yXV$2Q(Kn4>TXN08|KC z2wDU>7jz!ze9#4;#h@Ul2viJOLb!k>pi&~nfUP#I_?XccHRXbq?w6arlcS_`TG ztplwGT?D!qv;njcbO~q^=u*&cK$n3yEn!e4*)F)R0$pum{f};8>juz`pqoH7pud7{ z2HgUx1=WFW1>FYPLH~^l@(rK|K@Wi*1~q~n0X+(O4D>kY3DA?Er$A4Gnm{{2yFksL z-JllGGoWWddqB^Do(H`EdJ*&z=w;9=puM11L9c;YL9c_}0KEx%3)BXB8}v8OJD_(# z?}7G#_JiIhb>Th&`ViCsIsp0z^f9Ot^a=eRxB}#GfSe!~NCW90H>ejV0n{7R2b2g( z0`&!XK>a{oP%`K!(9xj&pkqMCf{p{FfQ|>9@P8mFM}jz#14nY;zm)^-d~_|&0TqDe zfaZecfnde$069S}kOtC0>_LIvX8)pD;jSN4e?wuw`R=8cpEmG~W`$Oi!s=#X-5owjJ^5j7dvhy`Dn%AMIcYVyw!yr@6V_-gFNi5Kl^n1v#0|PhI-wmtF0dZ{!ZC9<+U7=Eu^^c2gVr z9gm~Ui(ivw{QHaS*IM1NczkdAU2etepT|rKf;DOG{fXb7|3S{KR?|OI#cvndr}{BmK{He8=wn6I}n^rNY1LjE^Q>L+fiM{>2Q(ar>H+TfYBhA@VDmLzMaU zW5!oIjq{3Gsq~B$Yj^Hwo%B>w)}A+3ew~>-zwCk3_7Rz-yH_2%vuS(g9+@AL z=++-L)0$a1bWGY$G;G1^^xf(2Q}e!J`qK>)DZ46*em-Xj-P`^Y?J0VUhTzbR$ur-e zh&z`?ecqd1-!_1LKIsb@@L(FZu&M^0OKW4Q-^wmt|4L*0(8R^Bl_f zwuY`;yoH*67*1!N{5}0ew3B{)Kl*BPGHqGZhgP4wn#NuB8V!57H$66cDrJ`5Op8As zN$ZC_NzZ@rF@3%1Eb5irw77pQdQ*QO@lKd#Rt%$b)a7I5zeE*xy-2~1P1OARm6@o& zT(<*9y?bfkc;LxpmjnjkKK0*E1=8RiF?B*K1)oe(hvp#-z!lKvOE}gXK zcMtZV?|Qi59}ld%adqZ{eM@Uw&pKzJ z$#TPZD<-Gf4a=?-o)r%(epb9==~3~q;%UX-N|%-1iB)F4Wu7pu8U^Odb`h?pBJ8*pZU|`PXg(e*G!2f&{UMfnc;9HYi4dW$A5vSX(v8! z^UD)9rlkBU5*Q2;Ud8~46viSF24f|OG{!m->5MHTG8j8ZWHDmcoX21!2)uNlpCA@7 z7A1&c#>xay##omiDi~W5#3sg$1hJWsykZN3;T6@40k5cGEb@vSjFnzd&sgUbjf^c` z(Ztx{6?+&dMeJoTQbZeLAO(#OuA&st$yk{px)|$H#6iZE6gjY`juatB{$z**uGNMi zyo>=uq%am4!eFd4L>gnAA<`LJ43WXuVTde7N)vgEMw%#K45W!gj74dpn6WZVlrh$& zi3-M+G_i@XBTZ~(q;#=`(MT87jDd7f!&sCqb}&|^i+aYobkWGzk}jGUJJQ7-M#>O- z8I26l#u&&D?TkekqLZ;QLv%6LWr%}}Eg3>Ec4P=S3a2cQz!kvA5?;nYmPlbN$`S@+ zWtK=|tjiMVj4fFrgRvt^WHC~n$YV6}L;+(UPb^|A$`i$mm3g9!u`W+kFt+50O^h9R zVlyKZh%Jmpfv9E-6o?weq5`plv9dtaGu9P|M#h!`(ZtwMAoeiQBC(gzSR~pQ1B*mE zW6>hf$ym8abTQT~5(gPu771D5I~EB!yGF$#Aqjk=Sa=x&#Uh2Vs8|?`mBk{Bv94I8 zGqx0q491RPk;O=5B9GB169tTcGO>uUs7w?yR+fn}#=0_5!PrtJHZgXTiOq~uA+|6Y z6{4CkP$6mtp#>xs&&sbL>8W~$EL=$62h1kPLo5Ws5W0PoO3~UnZj76J7Cu8L% z(ZyJ|NgQNs*(3yG$0i|X6w%Hm@Plt`7GB1{W|6{Jv{@L8m77HxW8G$v&e*b9WH5GY z7Fmq6MdUFWTSNh4V2fD9ShPhHGgfX9WsG%OL|m^{7WIsE)uNHHrCKyGc2tW!j8r4`G8#3ajWJLo+8K*#L?>fqjp$;ms}Tno zTWW-C=sIcy^@p2why+Gshww56c8CM6>cwV8Y7|=-jYd(;7-$qVj75!N2V-TU zsAsHe6pf56jiQOMqfzW(q$aVK(P$EFjDaT6&REnWIvFdQL>FUSlQ_uO(j)|9N0T7g z(C-lmjK&_}Wen^QDU3yXguz(3N2D>zHP&sf(c8W~&K zL=$62o7lrh?P4#Z(JtB;1MQ-nv8Y{iGFG;WF2=fcaged4UC0+)N4t#+FWz!PwC$vKXmLZI4Eiuiw=q%jFksPJ!9QL(a6|xP&6@i929#P zNr=6Sh7fIx0U_EMi-hQ8tQ4Y)u}+ACj4hbuX6%r!L4iA52?FnbTwa0qKQ6o*ix>@I z&L*Y_y#H~f3%vhv;oZ@}h<67A<%tA?u|Qyg3D+W#AobCxEb9Hwv%RZxUXqkGjg@sDmj6W1GMP6|Q!XBK1+0 zQol>2Nd1E%Me3spu)e1HI9h@*40d~k5nxOa2J36+1F*i9CJffs(uKkLT81#BKHiOR zl9ngZ48{VH7GPW?(xg7#9a6tcq)Gh>ktX#wi8QH?HWlKeZ4v1PW3@;RFxH54sgE{C z>eq{OsoyBlrGAr0m-=`XAx_#}kzp{liHrbayU39GsH;-HOJqp>gCaxf3z5P4391j5 zkRY-Qc6&uufH6g6v3>&jIIN$LCbC#RAzfs#enN)GlKNR@-!B1u0E77jA}_$WNaRWV zVv#5H@s5=G6(UdSZxVS@f3w+VOu)NC>Q{>bsb3=sr2Y<3AobCfz;n) z_B9jG=1BcEu}JE-i$zkuQ!JADcqXO(L9s~c3$cjxlgR9&CZVs&`bl0<9AHcl#jKxX zh+@`HLSK&clhQ>o>nCN1VyT~H_HC2U$1#{+Aj$%ai$s~!FBWA|AAJC+Um?n*{w7f- z^*5V+;v~EqrGB-jkoq;ELhA1j6;dDX4yoTLDx`jssF3=5%)WFI+El6ECN@d^cCkt7 zcZy9?A8n4*KPWayeIYinzL(5CxEFnK*7thFX4dznh|R3;HNbHv;soyDTq<)vEk@{#`rM?g~ ztlyu^F-HFcv4i#dW6Z(&{Zqsa*6(kK9jxC!P3&O({^*mle*X-yL+WRlW0U@QqTXOW z`lUW8Dsee$kOMSc}S$_bTW5fXoqLcLpctt1c55U-w^#>TD zll2FriB8rZkS;n|e*nf-Qa{TaTMoz*T?X?DL|1?jV-BfbEV`tAndp-G6{1V(qfajN zH=AS90b9gDsb4J)N`3TIrTz|aQ0muDc@sSCDBNG5TFg`K?aAX322gpYz0FF!m@Id+h z-3b6B&gugknE)^h1meLPqvk8K!KZxs01cbEU z`HR=3EUR;-^fw(RNK}8_0L-u;Y_0C?0is4=Yx)DX<04@dPfTnH^mht`A&CxDIjM;p=ixB`6Fk1uX;d#dYm)*8wm;0hNGm z0&N8Gb%_adslwj?F9U4?tv7iNE+<^SwAbHpBK%PP4z7wc6gVul!bIEe+!RPq=(k0`H zILnL6uE)jc<;%g(!QrkA@WZp=z%%6N1v&Q>G|g8 z&E6h!Tg=aT&-QjHc>GMD&US0}@ys9TTObekJz#$?*xwoaKH)0};&%#{;l53Xa*v_VmAPYcNSAmXi1>>afJmQs5r}li6-uO2?nXm81wU^{mskQs+62cP=@a~J zM;hf)C(Tp31q|rK=_G!fUqg<1Hy*5 z7YLi;4?sNE;uav{Ah#Bve8mlLF9O~KJQw(9Aj(?&6?i`Idf)}XKLHm5{{jpGZv>+3 z#mzv}6>&e1?LG)(yAJ``?!!Q~+X!U4j{w>3qd>O%7?ABg4h#aH0J7Z%pxtg4+$G>Q z0ha+^0xk!>3|s+x1y}~$3tS0&6}Src8gMnR6}SfYIF>rO%mKzZ3H52-0u*G6ZbXb)`_ct$H0xe5(j`0;D8Q^0Bzt z?-8H>9hVkHc%`s>c4j9ABDgZ&l;1_2mKim}%j|sj*x#P&Ov-#?<{Mw%{jX1Ae9ND| z|Kf4XL8aemqN&Z_M|E=_Qa1cOKV;pY1W+GP637GcDnGjps)M}XZPXfd#;wL}#t!3l z;|}9a<1XWF;~wK)qu%B6)%xmuxB71L?eN|1yTf;egi0@I~W4_0IPxzknJ>`4a*W}yj+vRKa?e?|!p7A~F+v9uA_q^`~-;2JN zd@uW6@$L1!>U+)C>U-VyhVM<^TfR2m+rGc~-toQbd(XGex8L`^uif{7FXH>q*Wo+h z`^fjPuhaL5?^EArzR!JM_`dZ0-Ph&&$`|#0?IM@M_pR?c-$CC$ec$_jaMU{L91l1e zT)ka`kvxjt>bn+yZ+DD{-Wk2i@ra|7xqLae^`q!RzAcW|qmMX7Mjwkl?s(L}&mcL_ zA~^A+$1lfq@%#9lZ(Q_^D7PBFaQV)Nc0>>Sf@e3jbD_7@`?~iH@0;GYylvjMy?^t* z<9*lro_C*jzxRD_yY~Zc#QUMQ!+XH{k@sV7r}q=@r{2%JpL@UXe(C+Yx6AvLH|qV` z`w#Co-fz9%c@GZDqC559;jK5Eo}zn={xnKIpGFu*>(?4X_4D*|^$YZLy+|LU7wf0# zOZ3zArTSRCL?5S@>SyT7^zr&~JwsoiPteQsGxe4FM17ThmcCk_q_5F4^>RI+hx9D{ zLVdEnR?pTe^c;PiK1E-zPt`Bdr|B2#)AbE{uD(&v(=XA_);H-h^h@=b`fv1E`epiT z{c=5D59{aXm3o1Gg+52$tk2c2)aU6}>GSogjpJ#Uqrfr8vBBr`$;Tgq0n}(;7<7d% z(f1EC<9t5f$$aMv__FYKzOT}^z_-~K^nK&I(sz}w$dvl!zYetM@yk~hzeo9_b^lM7 zqg(y(t+dNK@K#86;NLyT&gA;!`;uMBTC$$pko;isL&*;(Hzq%l{AjW}xmR*R@)OCu zllvqmCMPBLP4*=BOZMW6v7?fUl8cjvkd42L-$#)}^du1s1CqK|5jK`86M+i?QKb8D+a#QloX)xGsrX8GsKhX8R{A48SY8*oZ>mvGr}{{ zGs-jCz(>1`ltG5`saqra2lGS8@-GKqqot==x-ct#>5zE zqz;@jaPGi)1LqH1FtBjo!hwqh@_Uesql^q=h@oPP3CD8>o;UFPf#}2Fe$YSz(@VQk zA4`2X^*$rTINlgwoHWn}tue-Fm~c7?6O*3Q7GrSgYpM0AovHVx-kaL+~V^Hcn zsg0>Shn_I>#Gy-umJTg}w1I2ju%m|_HMD%_>YUa138hoqjKIwI9M*cdzz(_jMzpETGv zSUy3P%;9m+(m}yNC4){KbUNaVRN!wf`FF}7yo=3i(5=>;a-X2^ib0zPr42e|(6B+n zyG#7K%dyS!A6PYT>%eUTx4W)(UE}(l>sr@6c-Q{k^+(seK-ng{t}@WCa@D);bKUQH z!1a==%JqtCuj^%3gNyrp>T+#$ZF6mRRlEM=`m^gVuIpVlxNdaa~P)gy2Ev+>n_*bmZpiW2VD=j9(Fal9&tVDdd&5>>j~GBuBTj2yP8}(UAtV( zuHCL@TrI9=U3*;5xt@2u;CfNpru|vFQLE8z)$Z3Cw1>1uwa2w5(PMc>>(D;cy0q=u zU$mRFziPK>4`>f+4{MKUPiRlU|6T2X_L=q-?h3Ry+Bw=>ZJst?Tc8zc3$;bsx!QT! zR_y|9@xWs>r{>ZeSa#4gx7JHb(0Xfqv_vgQtI|ALKW&!g*V47A+UeR@Ek`>|o1%@^ zGPDWWnc76{ENzmOsm;~`T9!6h%htweW3(CC+1eS}bZw@Vt4-7Lv{9N@OV);J{k3DX zA==Ses+OW1ubrTss149g(tO&<+Gx$t25N(}!P>FfQQ8RYRP8uzxHeKt(}roMxTEf` z-T!cZQTCGMr} z5_hS4nR~e#{cQJ%rmh<`*FDfZ$UWFS#GUFM>K^7E?oM-`;y%?q!adSG%01fccc;6@ zxKDGR?jGwN=RU(d-ksr&J+aUZxU<}o-P!IO_Z0V3_cZr(cdk3neYSgsd!~Dqd$v2@ zeU7`pJ;y!QJA%~5 z!2hxT6aO>*pZvG_clht{-{rr@f3N>O{{#L9{SW&e@jvE&!vB=N$-m3L+yAWpIsXg( zm;5jLU-9qtzv_R@|AxQK|Bip3zuo_VKjQz;-{Jqr-|7F<|C#@D{}=u*{eSm=<^RTi zlfT9>-huwSW4Pl?GdCPZIR-hn2O7H^=np&69OxnQu z_>Lh`-VcAD18s|WIfljVWaH&XhyTfru@=`tN1wyZ##+A6G5DTmZOzNE%5k1`&*(_B zW-{&E_`L&dB&5(*o0ns?<9vtae8-Um?pcmS%yk4E7dVzWFyeFk#<2;1b>}|EWZ)#n zxz6W-MUKUe62~RZ_Z^oxE_KY6I!^F29B%wYJ?9xwhioey9*5VF?U*KI^5x$`#~S#C z6cK25i3{LxGv&l;<1Q% z^;!YMS;U~S!k0Gu>eIIQg z{ksSy&S)jQ5$*>YFohDqdlqsZHIsG^?EMY?(_rJbY&(jn57>Dca$_6F`ExVrPgYUl zVz@ISq#Zy!&kR%Ib4Y(@D?nc;8d8zLs&7>cPaNi4({*s>(e^*QTx6PEe#ZP)gfD+5$_hFdybjXJw zGd)C!p=R(1FSG{gwGZWTszLe#h|hsm*ny3k;rA2VdCJCrTV1ro{UZuZJ5*zu7?51Woc%9}yz`VFUFD^e5<_;K$S% zWPS*c{uu1G`C$)X{5go>c$E4+5Fz~=Kk5D9{|ds)sY3a+lKylR(t^Ak7ouLDM=>23 zq{P+vlz1X!)NiPT89wzOf5b97q>B}Kgf$%PBMZNMuK7#O&fBUPb@BOvZD~fbyMoB*r zw9X*UNTlyz6#j6JBudRT0g(yB-w6GnOC*+Bm56A{l#0>COP+cy(sunxliG(@^D zOo_>e>-(ISgy+{F{q+X&j6z)UaK9UN_O~Lxpg+6;`VrC^no0X0A4{eY?==m079sNx!h0_t`DCD88kE>kOZxK-D4!}yOacF>2+;(j z>ulH^87BQy#Or_;ZG?e5Xr^8rklSpK{&Ily9jLbtRpHryP1JM!geWCWhrRw`Jj=DH z9}&{iU@tpD&d*xWK0)Rrgjp9xT>(EgK#5g^a`qz4LDJ_1ke9H39qt|Z$fqFk4fa!` zq)&p*)DR`MK&Pn|OUohT2kh@Bv^TA!Q$ErYCLL+kmmsVR$c#c*`C+sHpnJloLw-DS z4Wus)qJGvQuLB61^{VjgB*Hig`o|C@-r0)uAYN}pQP=$NucgExRY+fe5^sauvudf& z_i&?))&7RCCK1}!eA4cPT)jcP+F@h8ml7w!_B(z``~x8^4aoNp_4)$gz88?M5`985 zC7uQU`9abrv?4vV$OqUh_aa^aJl_awNCTc%=KRbl_S%tUG+eF85NR2HnmG_4)$tyeR5vE9xQQ z_CW|`noqsH4d9(ri*&>8WnPqvL5b&hNiT-qXZdJz0(dV(kS^F+SB3b4|4uXV3ihr= z{2oQPZIEAEOT9j7M%=2fMIwxMgCAkEqKyoYKB$=}3vrolAfCXxYe^p(qQqHnzmt#m z1Z;mz)ayV4C0>j?*$00gK`($h3p?)vj|=0y6rsd7qtI!kKFI%G?+0-oL7R*4kA~lk zUfB1Oe!PLSRUw^zqA>{XuSny42KD>H0OG69e$>&Wgpvy3Hz-O;cy^M4VM<3=aAf*-|w4k#bg3im45N&r3! zH;04!tsD;9{S-I^GypOh+z4}f2=}nL4PkCw4ma#>KMw?Z)ziU$0R*{i!@>Iq1o!rD zLD1iJ7qAfo{p~rRX7FACMW9QdB=8F1-T|xzeF@$WxIe=Eejw~@y%Y%9t&rOq2K^rH zT3{5^3_^HY8$gKD*6%^}&F4^9Dc9BE_AnP zh=Uh206ge!gYLEjxcdW>APd{uA&(Ov`fbezRa4T&R_c3k1NAM#^S=r2gAzaW^`gDq z6r#RpJNvEy`tclQHc-+RAxdh4%!~jiLVeGMe+lZ$+mI=5rKGP~sqaycU0w^F2I_lB zkosO7Mc9xVpN}v?)OTDJ^6G+2 z_^Vo}@7M_S#WT{k0`cDVDG2GW&Ov(C;eI-h)A$w;Y2UUV7zS}ZZGc<=JlNa*J?@8t z2c7K(2zj>M3%V5kUxFGz&F~L_cMWJc+&_T=-Rgh8`k$n`-yd7M@neqTgXljTp(A;4 zqz?T5t`4Y1z%yr+x^s|c&N_AP#QmkXcY<8FzY^#GX}JGA`V|pS5EKH>Tun9orIYB- zb{^~Ds&0_0uBJ_sMc3EbcuMXse#O(25a1?Dj(JM%Mk@?=T<#V-PsyP#lprO{zw-80 z%O3NTTx~=raebPNb%z7a6H&*<0-j^Eqn2FI3DpUxp+Dp zj|CJjo({(oK^srmdn%%M@pL$LT5|DpICkfU4@t+fej88O+f%D}wsbsi*mz3rg;vG0 zrQ@Y48&Ao-(x7;@bi5j|@s!-_A;q($<1Md^r{w--czdRU9`oCHrW`#IQM`CM=!sSv zPsu$VRJ?dP=xIwXULN$66-GQA)NIAYR$?KOWX| zg*)ePvhmFLInx>xFP;wPsX-f0$&IX4ym&gCqnm9!B{!y3@#5)lj~4s;O9VAy!dp4*bM@(=dl?B0l)c0%#k2Am zy50sGPsOjFWzUj>y<=*7$bokhg?pBVAxRyr&>*z;NTtb9iN29wgY zmB&EKo+Ss}p;ow-9C$G?{|%4fvy3@d)|@^Fl!9&*sl zsI~Ewz44ZumCvwurWF?}pTV0DR=SoP>}3XQJZ0}Juj0ka!!g;;Q|S!^d&t4w)LI)) z*~<=AbPuW}2Qx5h@ExCAkI9ErNuC2Yg(9To#E;4$^!QLg-SjfRbxKLk$ z*0_gxOyDifS7R4T4&_^H*JVC-L@mxm*4=c)Am z#tPSxgS|fll|8H6z`K$v4GvD`J0t2#eYDcxTgfx+Iqz$&G?*2WLs{P6Txl>XCI{XF zwUq|5V8^^*ufdYDJs%HRVOVm|eb^f3S#sbt1}hC|NHfiG{2sA%nWy6Sm=!-u4!Tc7 zDh;V+$$|G&v*N|e!@1LviT*JPTW`u_^P+^g61-J>*c9+pO`bB?sQtRwZZUGwf9xHlDJ# z-3r%|gYKWL@oKz09Mut}tI62O`2EGsQ}+Jc+(QobZt~iAEC=58mTtT}9DlXq94`+? zjiqbJLHE|MvS-PGcZ-z{E1!|xJM26aza6A>Ejj4cM{PV6zq^7eo!udUM=w`+DS^D? zJRv{{=$ScBXvG=cUhu<|z;B|>@DCg0yfOs00XN2*m2mGTO5l*L^ur45T*c!a=${x0 zOFIMLW;<8G&33Mao9$eMF%#Rlx+-kiiH4<}-x|^Obw&vqK%2A&K#j?eoT43xCL89fTV= z*c+C1+9P3UXE67RkgnfGy=;fB3Be8hAwXDk4vBc#4qe0k(ElyLjdcAk=#_RpX!Wuk z`dt)K(7zV%dbYDA05|kggK#rOs=TmFTiBoN)K*D5zxP*3I}z~N&hMMyi*#KR2ph2D zyrvay=>IMVH}F~t8?fWNwl-`a1m_k%5cak-hYil34;#V;>^OfP02lH2Lsb>qp+9nH zkRO^4H)CrR+o3DdY1AwAs!l5x9Y$)>g{+e3lPuh(}dmtBg-o1a9aL10Qy1Yt>d6pKb8x_-uo} zj87PD#A7@B5i(W#$+|q>G?Qmz0B6kyK_O5WR2$pdl5jRcoB_X?0ZNz^kZK9jYAIoQ zD<$NHDIqUp@`6MOOTaH_poHaBCa(~@h2WhVq=XCn(q_NaSeswTt=u8y;(xUG zt-Nzn?`EWfdiCJc zb}sf~dypI7fWHoT|7(AGpWFIt-Z8(JT(@{1CcUqyeCZaSL*){Fu7z#nOAmXoq^lz- zduN6ZD<|^@!cra*y)$bMC)d*)}T``;YJy)*lo!EwgL?mIbeZRx$UKiszT-N|9w^8d~eaNF{4-bA>$ zUxSP7?P}&5b}9D@xN%9R^q0TpWDCF3fS=7i_QrM7?;PL5KL~dM2p5Ofxe7O!?WTwa{#xCSC_XPCF1`AOuN-ybvpGz2sPbUL}N&L`Jz z4Nxn&t_hRtcYaWWT-fvJ+7bXo@kw1Rx&Dw(u0Ik8{Ob%5czAcYs(@R8TY=jGpjL8W z|DJ0*uo_qm{1fm`5pw-G1d5XDFJW?B?*&2U1_K1V5qKl;CLs1bxN7{M26Fv10E&?7 z<{$`o3-A`$sI4Mbofp(hu3G~j_}v!9M|uPT-VVGScn9zf;GMubfp-D#0^SY08+Z@! z9^k#edx7=9dfH)Jm>Lf}kk5 z9u1T0F)yf=T#x%f4di+P_ylC141gl!dMXG4J`H>t*aU0>?gZ`x?gH)tHUoFV*6vzz zwHP4aGx?whxtSsv_6(UJ&pF;0wSPfiD7I0=@)%8Tc{~?=06Vz`ek| zz*h}W1G!!cfLh7b3frwwa=jiV*Bf3?ExFz_K)|t--4hBx!wtp z>sWjzKHz>oC_=9HtH{+J05y~A1K?)DHrF zoezqT>mMOdlw9A0$@MK{zO5zKcYaVaxeh|+U@N))3H+WwRpk1?3j+QK{1Nys;J<)B z0e=Gi8~AVF&%mF70w}N_8qcvtwWK)=5YP#90$o5CP{ST+t(i1E0E&|4hE6Z&^a3UT z6Cl$Ye!U^nCrDZ%foe%h$_GVA>kD4rC~2NBY5gGI4}RVNC_-9t5Cp%Ysz^K90M(M# zAK1Tvv||FG2x-TLNIT980xu;W1m5xBoj{-}(oXb)qNEML{YhRB&}V>ZNjupOY9`Id z2SrF57$R*Df#5e7euG;{8vR6vb~)g-JUFey70i)BtHC z2!#8Q1_(F`II4lP(SA@fY5sgrgtYV^2sj2f26!6qG~nsL(}81wW22;v3zK$+7gS5y zc-R=Ea2oYY1v*- zEonJ^Py=aGpfjbFw5j=^2x-$oq)jJKn6zAAE-(+6S4G;{2B?9w839l$X)}YMC~33c zH`@mb7JlP%~-EA+v%&Riu>}pa#-b20*Q(t%BdGC~2$1q^$vO4S3}t(n4NP18EoL zgQBFZtsz z=ggmzncVa};$>-#ve)un@x9_yMx*MrT%OesuMn>g-zUCL%!xViO7Ti@SI%pBzo(J+ zTBZ{kMX%+mlt#&GxjL;;@mfBR@mgl$8gf1;eo(wdyr$r_T$|7+dM&dljk4Ero!slH zUdxAaUdxB&e7NAX&@yq259o5TfiLA+VKS-eHOMKwN|^I8g?hHBiZ8n=qKB{T|N%csOo ziHqW5(QCOqrBU))KArNKuPS?g{M9}*?X{1zYUsLSB(9-rkC6@yU4M)uG;|FzvRy;h zA-a#XkMwBtYV>KOH2O6LGzK-&8bcbx8Y3DRjZuv;jd6{v#)QVC#*{`*!@vC*jaiMn z#+=52#-c`1V?|?4qolD%W3R@#Mp&K-_1a(WX|!mxYP4y@ zHMVJVXmn~MG`cjlYxHQOGzK)%8p9eHjWLaJjY*B1#*9W@V@_j1V@YF0qokqUUax*$ ze@Nr7*M7dIq1!!Qw|Bm7=lrBbpT>a3kUJgi=j%4kSN-!RG*timX${@R`Li0jo%3}& z=g({Cw$3kTENbXB&tKLkYOHFMH1=wgHTG*%G!AKOX!v~`_1Z6J(P-1?IOcB9eu4VB zAbHH(|C^2W3;IAktYD{V5G-fokrV9%HTQ}8y!IJh_(a?G?*r%a2 zUU0-~&$Mc6(@1D^YxHWUkBoZAjB4n%GrH}JZa1S|G6fACzs#z}9t|D0%mEG6%N+LF zFZ48YtS;=(=+fxXNNEgejA*Fdg*lD9#-fJmT)3{WUqdx6JnFUY)c!j=HT2@gSNl%Y z*r^&jhc(pKPSx2trJ=rd&egR4t8Cv{&}}VisOOzp`%bNW=K&4%y;E!7dBkhK$kR~& z7j=onn2{x2HP7}8Mx7fonPYs_gZYOH9KH1_^qUBd&#A2?y8wO_K=Yac)8wZB!5^|!^n_H36c*gmAk^w6Z&erbSj*VXg&GiTboWkIo@>2DIG1R zyh=lTobqCgcWGSRcu#JB)u_Ksc49dm%z0V2tP{VT4d$Ad`%Wd8<2|$!znci=nwo9j z@1=q{|8H9A>%{$DFxSM~_j7JeYYBS!K{1%C_3|UT4fE)wk`H;@?vKmCT&%}~JsfIn~er4-0kK6rqXs&i# zep7Pi_n33^-^pOEc3h4Yg1Oo``h7f@;~Z`A(!m_ZWlJm<%yC?{G^c_&dfDm_`S zwzO8AXUEiz!Imv{8|E>0QfS{=FYR8iZ>^WDiD0hQOS}@y)p~h&#?6J#(Uw#4!5qhB zOGiAI>O=*Oe*BrIogs4&DDB&e8oNf!slqq>FHpu*2|w2gSlES zPb>v%6eQUj(>4iLwRVw4=jyXp!$_8__anaBO*#nq6YQ4NN5zN(&%d3;YT2gSlESZ?K+^IY(o;kjHU(Q)u5>FPCIP9>?k}WjA-sIm%Xox!Q4gdnTBx z^)g|%>-Mc3mv@IfdU;Pi*tgcpdqexyj>{FEd;L1*99@|S=4!p{DhG45UZyL-T&k_xuGY(*YA{#p@u6A6$VfBtVN9zga9dnNU*7`f< z9Q|D>j=mS#x7N!)r0k;QkN&$gzs=kFVSNVv;USG4jV_H&4gF1s z5BuMX>-RNs8v1Pey0qK7eO}k0^WFN}CROjGALtr-zF%X|JLyMNeP92+*?nK%`>}t2 z)Akn!HHN&lGxWDZ&L~)o(m~@_b)V5!`&YZ5-jEJ`wSRS-`8?G1{`V#{CcTI3sCW-K zSNr}Xr!nh22bd|d+6hz(f`Ve-#v4~9bZ}h z!O#Do-)HMcJn`wzdBNG|y>{oD-|^n}Upu$3xV*CaYk&LQAO7^`|M>@f_R|*M*3p^h z+TNY)>FrDP4-BSX`I^^X_=Y#V<ic?^le(XpJfr7Xz0d7C zGxfs$7Z030xFdbu(5r@DJ92(z=jg>_ZytYZ_U#kzn!If4irlX0t7op6{ZRfRb043- zap9K2ZHu2?x?}nC#V@Vgz53;~`$~Vg=j(gFx&E#4clLd6|Mw64u=3-BKRxubjh|P4 zdH6q%{PyS{^zYmB|4chU|If57`hTXiZ;e0nVGrMS@+pt#c;u;%>U{KL9-DaF)rz3I)DjKAfrZ_8f#_IFIY^Ih+r ze9vX?ox1#r_vNnK_5SIruKvKx2d}wy_PP&!IDh>|K05cYkAGtRh8u5MxcQb(7H+-m zQ;WBM`Y)C~bH`_wKlk}B6uBm1g_|HH6mqY*hvwz$8_n-eq^%uYV z)!|?N=WmYu*Khy(=-IPN?|4n^vmgG< z-~9X5Pc5u`|Jpmxe317%|631yJ#Ym6e|rS#&!M64|J#G{z``Fm0uLO42ado4N8o`Y z@W2sx;0Qc$1Rgj7|6e=;?KfKKH#r?Na~j&`rmTkcyGi@ql+@_d zh--MNqy28&qoI9nEPCy?9nm9_vhr@uDZ9cXcRQk8me>qn7ln+dtSHm z={1dIul+OX;WH(TC5;7*yoP%C%(%voMoL4s{TbcnQdQ%ihW1&~K1-&2&RO>5wjcJWBjX{k*jV=wpPOI1c<%1e!4fSxhw(rvZcPX#vHojcY znAON>Olpj44C{LX8a>J>9VdN%bwb(SR^2amXtZgxc5(W*L!HMG4N*Epn6(VF&ZEGw(lYDsxfT-EUBl<$%E^F11x`}u;#q{f)n z{vR_MBN}}g+cgrp&-z3C-Po$foNntD`8RKfvl=-K^>&NCcgv`T_Pu3LBc-AJKjmq3 z>;5&YA@2^&-O;9@ns=z?=j44(`+ZL9D(d^iF%9J}_UhmK=zI6CXe?>WYm93QsHb^7 zeLYwsuHPHk=WSi?J9c}m^hewK{%HH)vD?do$8N9r@56@b?`}DEdwJxKw#Sa$-o5SE z?dA19+OB$A@77vw(fW1V?8|?D*zd#hw%)Vh82-=JyZvK+)E#%5_x)CH>sR)ATUW!T z<*j$G>$t1Fj=z2R{)GJf@_XIX*4^EFPq%ruUt2@x$-aDFe|vgOWA#AYtA(xiblW-8 z`Li$I*XIy=tZmhO@{hl^-ZP?eH|fq{;7_}_^bq>cXU*2D`;2}0{iI#os>kymf4Q|DbNu~Z7D@iGR^PT`?;oSuxoN;Z=J+4) zhmU`~e*O3#@7J4AaK8VTsUQCa{9}%PBYyb!AMbAs9e>x4zux-sKi&`bZ&{x?`LD4z zro5B>#m<%gIZ*qJdLFnj>7Dei1#!l{e<&|5Xz25+Lwel%*9kWcX}=6*AL6wa_SxKT z>5iz6Ug)Q!dh@{&w)~39o%opRak^ z&wm~E-9Km_|8;qBR5^kBAie&zcwV)KrSh-k&DXvEx*`z==0ALdR_Hw{?A4K+QPrB{)%$a@;kJzf9>JVzq6z~ zgp*MoC8v}p)!R1h>nZC#=%3>kC3M}O+xt>NIj(%r&f$xEXVILL9RGFyOG&RSCC9%G z@XvF~cMe%TtEzldPM_CyRz>#(d4Bz~Qp(+y&y=&OKEE{JwVkQ&``0R88u8kmm*M`R zzlrT%%lP}fTs3OvX!x%$EpD_I7WBBAR!*yjC1u~!+6${>`33d*$)e^* zHB|rhHod;*lv|Xy>G7e1;r@-TzV})6e@8~!a{O!OJF?1gjV+YZlg-M0Uq_Rk#EVINGvemDRJVHys>VK@Ra za1@TgahQb@a1u_z9Gr$Ta2Dp_9Gr&>umBg~5?qEwxB^$<8Z5y*a4%ekWw;OShX-H< z9)ySB2CTxv@CZC=+~L6%*b3WV9BzXhuoEU=7u*iJVG{PhUf2gyupbV<}Ha2#gg1e}CZFbAjM44j2|I0xt90xZBqxCEDB5w5^hxCTpb58MmaVHxg&`{4mt zfd}CsxB;v1FgyZ}8ei_g7T5~gU>t6P9k3H7U>DpDyI~Ucz+Tt~Q?MTnz(JUXLvR?5 zzziIPV{ja1;RKw7Q!odo;S8LGc{m5>;Q}ncMYsf)VG*vtRk#LAa1Y!I*I^m%gZtqD zSb+!OA-Dmn@Gv|Aj~de+Y=Nz?4aVU%*a16X0(Qaeup1^}5A20~Fa`VJ033vB(0|=a z55ZwL0yA(Fj=^!5g%fZRPU}}d{knO$0GHqjT=l$@d~Xew;C||C81=iRuFrF~L5{<@ ztn*yfaV~wHOCRUX;uoN9*I)0sd*K0CHJ;Z3J770V!6C?TIB$w=t<$f2-Xhex-1a)G zz{AE@w8Bo9g#B8c6XNjM7&a0Tv#2Vm9s>K51myI~3r!7(@m z^KcQa!gW}IhmFInuoEU>KOBbRFbC)05?q62cn}^jzNQT(U=JLCBQOi6;XGW1CAbeB zf=7+7jl(Y33kP8aPQV$s0E=)B+z&U5uk+wGxE=PvG#rJKa26Ke3fv11z^ZYi1$Mx0 zn1Vxa3{Js3T!gD|9ai9B zJOHc43tM0Z?1m{g1jpbM%)>>v3fEx;9yac5g`F@7`{6JghdDS0m*5&K!-MdM@uD`E zfIV;kj=(IOhVyV4mf${k2p%<##$gxig@Z5yC*TZRfJL|m?uQ%3H+XOx+z$I-8jiwA zI13AK1@46hVAXhW3+#a1Fa?L;7@UH6xCmF_I;_CM#y7UYPMC!Ka2Srm9Grtoa1EB> zL3qSC)&>)>2c{vnGnQeSb&X}&o`l@~*bLiwI1dYuzQ&4dufh`C3(IgntiVIC3Xd4y zLN6&^9Z z*@LYx4m)51Zih+O3sZ0arr|Kmz%iJGlQ0KoU>?rH0$hScxC%>fFD%3TumTUkDm-Gm z#DlFc4m)6%K2p&2_a)oy=ZZ^s++LF8``qs@>1Dgme$Kdr$J-?X%n!me9EKw>14ki` z&r7mwPryl-gVS&Z&cZx>=y83b-~T*ZfCab*f5SMw4Qd_!&l%(NGfv&{73L2Z-_ioR z;SijHi*OwthDYtVzE%7C$M>ymP`B^@-1gQE*r|_c{OttP?f5_cy|oVx!Vx&GKPBsb ze~Rr{xB!>o8eE45;08Qud|Mmrgx#pq%cWy>o-ZAT6MSFyU;q5+@3RVE9Dxu0FS#P%{Q!WFm**I)_mfqUUPEW>?p zKRf^{@E|+{H((VWhDYF0?ty#ZIxNF| za6dc%EASvZ1UFz69)?HYQR6#2*aBN&8;rwkumg6&1nh#_VK+>|9@q=}U<&rb0XPWL za0m{=5txCaa14&aES!Loa0=$&G@OC6Fc0V8JY0YUxCocvGAzOsxC+-`3GRV=;W{kC zeQ-ZK04wkyJOnpj6&{91;8Ej*2U}n(Y=d#Q4R*jzn1EeyJM4x@*aLfEA56i1H~ z8VI07?p6pq1hn1x!X|2#c038!EVPQw{E3-fRe&cg**fQxVmF2f>Rfva#0mf#+^ z7p}uH+z0o=1F!-Q!b5NaR^efI1RgcM(}OLr6}G`R+y*;fCrrRDxE*%GBg<4o<@vI1BS|4$i{`Sb&Rg2`fxWN~ zreHrDfP*j%hu|=;53|pvoH_m;5=M_1-J;8;4&=2 z6}Sr5UhDq21 zdto0;!G1UZ2Voix!C^Q8GjJ4+!Eu;{6L1nv!5o~1GjJB>;T)WY3$Oqe;SyYiMYsZ2 z;TkN#J#a5vhh?}A?uQ3p1s;Tl;0CP1!|(_^YJ9H;TVN|}gK@YGcEC=UfL(Aq?1o9$ z1AAc~Ou>FQ00&_j4#8nK0yA(7j>9aRfRk_v=HN7(fwM3V=ioeCfCab+m*6ri!WFm* z*I)_mfqUUPEW>?pKRg6Cj8na^52hf;b83L?L70X^a2Srj3><~5e`=m>)<4Dir&#|K z>z`u%Q>=fA^-ry`KkJ`j{Zp)eiuF&i{wdZ!#rmiAv;P5Dfd?VSWvX^us>~mTN8nN8 zJy)`xU94vp>)FM6cCnsatY;VN*~NNx zv7TM5XBX?)#d>zJo?WbG7wg!?I(DV3pI!ZM01m<-dmZ03Y@aLb8i5(+NAXH<58Mma zVHtAVcI{{X12+GD_2FONzMtEB{}|g-Fb@~uDpY;9Uj-gEPPf8NsP+5awASgU^*D~h z9Grtoa1E+|=O2Vej90b61nhwWa0F)IG@OUaumtzPL-45a>NxCzy>Jj_-~^n33$O_H z!2NK;_yG@YgWF*rOv6z)31?veuE4$U0IV8kT3`q4hAB7%$KVvq!$r6X*I@-7Hh!=b zcETj=hr@6j=HMJ$f@`o055gnHYuaD}_P_x+0<&-$&ckI`g8Sehc+_}p9CpE8I0!Rv z0?xn%ScH4vez;+r_24$R9rnRA9EFomJNl1{*#caFd*K0CHD1>OJMDSox&+j^{Lini z)9pHT!zAp1TDSYY`f^OcemDTtum5@IbwhBN+Z}-!=CvN@jWM5Pdjhh~>vC*Q!x?75FWDmqG#L17T5~gU>t6P9k3H7U>DpDyI~Uc zz+Tt~Q?MTnz(JUXLvR?5zziIPV{ja1;RKw7Q!odo;S8LGc{m5>;Q}ncMYsf)VG*vt zRk#LAa1Y!I*I^m%gZtqDSb+!OA-Dmn@Gv|Aj~c(|!4}vG+h81SgB`FFCSVub4!dCz z_P}1)2UD;g4!}W}hC^@|j=&5Yg=26WX5j>!gi|mFr{N5og?Ts!=ive@z(u$OmthgE zz*V>gOK=a|3)f*8?t}Z`0a$?t;UTyItMD*90*@NM>XU9ED?W9A@DJoP<*_2dCi-oP~Kf2j}4eEWky$1eakE zuE15e21{@c+zZ!X8SaDo;Q?5I2jL;O0juyZJOYmz@AO~`Y=vzw4!6M$*a;J`3vP$q zFbR8LFYJRU*bfKbAWXv{I1EQ%29ClpI1aOL0#3pyn1j=B2F}7foP+al0T$pQT!PE6 z2v^`LT!SUJ2kwRIunhOX{qO*+z=QA*+<;Yh7#@K~jcUtXx2&|lR@esPa2xD^oiG8r z;C9#pd-Z1@bp5o_&-Q@lo$PN9u|3T8DBELfPq017{?lyF@clWq=h%n=cJAqcBQOI;;VjIzz?sn9V|8vT! z?g#$%Y8#9*zm4q<*vWi??JlU}>guqLRo1bpb-4KyUOyaQevs`n9AaL_-}S@#SG9gu zhxM{6&cSKsXV{*FdFJQXo`(y}7ua5eOUy5`U4$#lud=-cOU&)VA;SV2jP)8)thP>|nl=?F8&%emmRUFv)xm z+r6-l`4rpzaDe$Cwuj*e^BJ~B;TZGdY-iyF^EtMs;SBS$Z0F$|^Yd&kzykA&Y%jrO z=8J5vz*Xkg*e=06%65Dp3UoTG`h#d zms?>Q^KrJf!4Bp-*-pSN=C`xm4U^3Gu-yy$m`}0Y4+oeZWIGLqm>*_)1ZJ2YWqS;c zGoNL90!}hN#dZ!(Ge5)jEX*@M$M!s2V7|ciB3xpAne8H6VSbhEHCSSP58Hd;I`d_= z_rd+lA7Hxz4>Es}Ed6 zb`R`jzK`t`>}P&}?LnAkeu(X1IKq5}?NKM&20RRp7**CiZr5619BzZ1Faf(^686GA z$njqrWP1n>!wejS<1h;+;S`*P9M`ox+jDRM7T^+GhAVItu6y1?bv?0Gh80*f?)E(I zk@~*=c9rvXCtw%c4tqSW!}t2F?rzq-TkH0(2X)%~uo8z#1mF+cHf_vazsN>{c=j<-S{qO*+z=QA*+<;Yh z7#@K~jrV!51-8OA7>CumBg~5?qEwxB^$<8Z5y*a4%ekWw;OShX-H<9)ySB2CTxv z@CZC=yx)T@uobq!INSz1U?)t#F1Q_b!zAp1y|53aU_TsygD?$;VaD?wp~r##&a!(v z+&{tgl;@r5&*zw*wx4hOzgOr#ZtkCh3(ObYetL2k_4tat>}jF=nv1u1u~(dS%O~~S z*i&P^^T?7Hd)ddjYFYDLwrfI&?Qrv+%lH-f%lH-F`Jeq$WxVXG<|{}03Hg7Ip9uMJ zKhuxP*3YR)`M<(XhJ3g0@%^8g_F{u4;`{kg)7puz+FEoR>$l~y-PWTtJGjI4Ro0fR zy(#5qyDiJ+KRPAjzUTU&#aU>g#?~^SyC7 z3#Xr?nXT7Vl|OfSo1f=0%J-2+eSg%>wPN`GGx%Nqo9-)i&I#Oqbib|Le-e2wcFs%b zA@9%IG4V2fW{ob>vwAq^Rru9t|8Y7d=WtAv>-C%CL4C_szbhmE8mq5d_ub#5uJz;U z;1}gD;TJ=G!q4>YGJaY9*YL{?`2Ko-hF=Z&$xwZlt^R2V-D<1(%Ju$ZnZUPf{^>dS zo#rbCzRT8s%y*u3`ic7P*7TI}3+(=&e^(mYF~ogfT6v5-qkIK3N%_ymck^~1+w4B@@!h;Vj=WT;zRUQ2{{{SF zsD3i!yNq9ve?NXD@b&zo-mD+X=07JR|GVZZ2mPl4-+IF@$mhBAIfam)4*4$QSH0MI z9`&oy{&Q3EA8x*K(9b6IpPQF|8h*Y3zaszH_?2k?c}e+ao39+%&+~Hfd8{c1{*a&T z`0H)@XKE8RVU$>8}KXgpNL;+z^}?5z^_L8XL<79V7{`pczk93%=vQJ?r&#h6yQ2ltQzRT42`@avr8uAk%-(~Ytarr+qUpeSM7xG=k&&&TW{Cu?k0@Z&t zuSd%D`muCS-?G(zVMcz^>MPfMuN3%}&3{ose!uz3fgh@G*FyMN`6Kw*kni#id(Lqg zzasxq{7SUnpO!yuzH+^v&91{=?Dz8#^OfuVX4h{oF3JBaektU;O#d!h|1ZhO|El@Q zLH(ki@m)4w|NoQNt1IR!NBb4||BYV>`58Y`-({=+(v%k)KG}TbpuThdgkO;Vbo@fd z&-oeOWvhR7LjIun%0c~n$afjPD4)mg+3q;-cua?Um(72fDh|Kb>MIBJH}iFW82&K6 zbEsbk)pwctRr!nf)u4W?68M(QKc_68^Q&C%XNzL(_*gdo)xN*a>MPg%&3?9ebw&Qq z@hc(U^|r$vFD_gCVby<4lljU){j8tyT{izUDfy2uU%BpYw%*qzk7UfrSjklQnTwygfH zxEFifTdg1EdVMb&)VGYElh1Shu3X5^hkTdKf4^U!YgFZ+{$_qb{;Ku!{z9}ros|C_ z^Ob}8Wk2t*W8$*)bCqUaw_(0=;Aca=%lKI@Ho{~4DmQQU?al5>SF7R(@9!xG_4A?n zE?fPp^YWi%{U}HJA4tego39-Bt^Nn9^52YK4f(l{@3Q$b{(3pT%0d0je7`>D zcP3ol?YqN{zspwtgBkg2){k;fKksLJm+}4j-^Z_p{Bp>5+5Brt@{gFW9MsQ+e3#9? zHs!@$|1k5FqkYwXeK&q7~B_Sa!@}P@?AFnLvi^9^Od80zy6o;8>s(bzy5ynl_Tqa*suSe_~H7+Q2#Dl|M`>` zJAa$`%0c}?$afjPBLAuQ72o0UyGi}))zA6-Or#v?e(T`uRvj zK94Wuz~7{wkNW-GX8kJ%zN>kB{kf!kUSE_0Kj&wBm#v?w z|E2Y#9Qf|GtbWX8^FN_}F5o>7<-pH|>bq?Id_g|XpUQ!s3HdIYf1`{G&ai%z1Ha&B z`f=I(n+oz@Y`$`&e{)JcKSL=8e#y_&ciHNHQnMFit-f;L7el_w<`;DQFW~X39Qf6c z@3Q%~73AM&^_3(2#k~BY`O1Nx4%K(r>fc_GzsG##z)yvIm(Bl+gnXW#l>3=aNf7pEGy5E%av(>k3_3zaEAv12ia-@G(MgA`HmFxaykKcQe^11&g z2Y#rZ@Z)ziBcJ!glmkEOXO54{*8ja_`Rmq?a^Smt@m)6mD}FyeHD5XK3x39T+59!X z{_o9K4*Yz`ciH^=GG6RL?hnd=Ukdpyn_o)E=RFzaz%Pb;m(BmG`nizTcjdsZhJ2UJ z|ErSxoz}l{;8#Mv%jSQrAb-ky<-kw-d51l|TsHsfRrzz~D+hiuNzn_Zv%7I@9`7WEk?$M~zB z@Dm~5W%GYplz*oA%5}d*vDS}e^MB_1uQFe`?l)Hh-?I5XFUaS5K)LS6(t&T;{Qs!R zpRxMNfu9QbE}Q?0q+BLC1fTpRbkc{$}qF{GlYD&-9f8Kj-Hi?(y!q?D~m$Df#w#?dQNR zhJ2UttMb3-`j2_lke>_rE}I|A%KxVM%0c~7$amR%9jn;rKbddGtxKZ53L3TkUB)lV z|1Eymcg&B)1K+aw%@r^9hKHK3T=zGt-;$GW&*w4ax*tpUd51lJx@`3yRFMAytFK)5 zy^5dBw`~3iIr*xTx0c>>%N@}>&LRy-=g#N zhFi^74*Z0l@m)6mq`Z84yvLO5zCFj9A9}uxJ)|Q4+g4w>?#B{-KED1|&A#Dh<|_w& zG32{!{ltr2?BbaD%7LE_`7WFPFc}x0YQA#aZ!QGBW%Exi$bY)|%5^`sN&Qo*^3OJ3 zx$bZB_>DaxC;vk8l>@)vXFEQ2U$uTZ67nxIUperLA>U>Evi$4u%OSrI@?AFnky-h7 zn6DhvFNJ)U&G&!*_TsOauN?S=knb|S-_Q5)L;b`Ofp6LTM^)wj!hGe(`ki?%_Qoyd zE7yJd8Dxh&eqEnd|IsD+k27C6@Z)~QciH^MsQ))U*L>x`FNS=V%}?aypKHEy;Jcc~ z*MFSf|C`NM4*YDWzROns2{PVzrTNN%pAPvho8Og|f1~-zb-&5gw0nUVkR<}26z z&0c?>CF4yzewFKfEa7MC-?H`d?1X lV%w-QVo>u~){MUTFO&*Zs|2f1gv3|9bP4 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�Cfd~9q)#S*o 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

$Mej<= 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˝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�>xPaXq?kh}@eBG!+@h%Ccs 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 z z1q~)_rjOX=U?}!OD5a3N=w?(#aw$fep~?p@$%tis4CWBY*V)GcqE+lApf#5M;{5Rw zB&ucIw{Q~5S4+EZ;ps5dh(^LlB@Pm8_$%8GVQ+j}NYE1ZP*9>N8vx?~!EoId?sVIS zscc7Rk^^Z3Hg1AIFQ!A6sxzn&aD2 z*3X3a+fdAg9P&l700-q7z7(oU7>_+f38)2whEz_SD9Js&k84;Z`ZxhuETLY=YhX1G z#gS*kq4+}lXsR{t=RRs9BH-T)s4?q517|^rI00sj!nNxKe`4WlGnwkjacmB+W#HzI z?!_4NBK#o;S1eJs5z#nXCLq^Q%U6Ji!4;}Oqi5yJzhUMQJGTK!Sb^JXH&8nGk`o zfk(`7a>>LO{s=@)OqZjDoF;6k-LRbffhhaPCr5fhn`zOM5dg6%}6`LGFQ#|9Rd>)m^Oitypa}x zVW&)`;z9$LbYrMw1{%TxvW>`M090Fc5q@x|6fO2WJRUkH%NDM+Jup~vK<+vf-D1~J zpU1)bzi}FY+4fK5ARI7HNyf<1plwmsAT+R8R_& z`Ez7#@gYLGl__!pDT6+u!Z55szqvBd1LxDeNnxQVYWVV~K2E_l(+wMjeM$#HZ zz3Wf#4gU;o*<9S*virMbUn5{#5HMSHisTfpCTUa6=n){( zW&0n&JmClREP4hG2=RkEYxSJ^ii^jOAU)Z>(m2d+aB_xcqL!%PyA8O&KU+f5Qsean zn3xW--gBGv9cdO9LDeBHf-cy{F4!P|{h)z~GvNLQKbfs&Lphoh|3VrQB3)}S+}g|p zBDD{Q$ExQSZY$!iSzRy!mZ@}>SH779WX>6-8S4O?;Ua=lr4U6qQ$@`Ks*A9cfB(P{ z0VqfUup6@3VvwpIso42q8abmVzAYM9EXShmRrY2GaEJ_gj+8<@D88d+nx#+?MtHjd z!GQ?os36pcks&HL2*F$x%t7!(6{N*#o(kq7c!~<1h+w`7!bGG1Arq>INTCD@a8pwP zh4FVdbIQD9N^{|dhhdr1qsy{=k$;nnWx9_ZpW}<{<7a&_I^*CnKbhAlZe&)B#PARX zyXwfT3@E-k1c&DQlC93g*5&zd!HDlM;M+HWC*f`}zKpH1?J?zpYtkrK-Xb11zyZT; zPiGQ8oRVWz!ZxSL_rfka4D+ar&`jT*O&|N-Z#w9kY7G4-6U)On5ijx|^i9;iHyGz5 zp6QSOhQGscAb$-YIP4)5K?xo-YK!MY)Ak^V^6|z0Jc7wtLYx86YA8WG_^YKjz9)-$ zk{4*>BOzSer6XWHGh%-~0({7xz?cTcj~Ns^CEkynPmau9h`lMeIGi*F-^VQ)0Aht2 z4DNxDY~>VBbGWu2oJPTnvE254_>Uu~gz-X&>I30bIHyl}qq7@th=dPhE0ffJhqv7Fb3cP%X*kxrMQK)nzi5X2-7;m<)j-WPCDD9F?F39Z&rTZr znw-Hv!+!jQz6XK~1QF4vaamr#k9+wHimD5`j&etyOVW3p4q=ozq3;mj zqzN#hDSjnVsP%e}>uls{obei)xjJY19=6cExQ!U>FJp%fI@eV7+{LWGffN}Mcd8;S zQcvIu&jJ;=x&kHZL08}lPer`dFpKrg_UeI&$R~|TI6OL)rzBWw2|gLR1Yg+45}{AP zo?Ph@L?FVId&yJ4CiIIJf%DptVl*AZR^(!JIQ&AYxM6T+szQZuTdG0@U|K2W<@lD1 zzWB|V!MTVdG5nz6WICdh6&Vtm9{9On{T`kfc$}RbabbMjks%`Y%W@!%0?|Bv4YW*HX;`F$L%0vQ>y|21|)m?gF+QH2arXRbChb8%_OW35tkPYgmQT;TjpOyTvCgx(cV}JF~%lPuW;9s1%)vS36 zX5i;3wDtHKGv_UW55-LXD%_yR^sl!3E4xx7w57x6st-8F@r5_Z)@Ux8O6{@GT5Ss{ zQtf(c8o7AQNz5uI=3UFbT4Gi^F`c+yOtO)6)88VA zElg}e0XVH+D=}-Gm^Ur|28r3=#O$%wTup*^kb{F&O6J*C)e1;vIO<$xEs#09(|VLd zXs7zl#rfxnrhjQK*_Z$4*_WvGBo9X z)|%_s`l_XX!EwYgvi=jTnkB*o1j_>>j{4t~za1P6 z;x)1oED6zjB>GMHyBpjvifGIY)E1laHukET2OT%*AWkXb$0OB=>YjM8C*C(H;sZuJ zhXs13>mO%=VosQ4SoZIPt_njJd;Jes)LLV0_|fcVl(mkl25x(P2j`M(-N}@B67rl? zF_)RafJlXP&v|7VypF>MD~)%AG{4)QG*7dd30m#aiYw!&_c+U72vv6(u}Mj_f@g}) z4)RWvlwk)y5cwKB3z+E;oWRlz;k~ki<&gCOSgxpvFeHYF$GmB`j?K)W$m0vk>XRl; z*m4h^0*AVc43ScL@>`Wpwc3e%St8?<+<11&O=K!ko=HW@U*a^NORN{Y*y{wn)_f1- zjWaCcvwom8pr|u80)8gaMGh>r>$XW4Ro?I`QLkG+aCd^3#Dyy zM1S`H0Ih}E{0Z|U`X(kw$y{rWN9Hh>zz!B>JtmpP=R~##XX}GPlJbE9tWOjclvIviuMLpFx zXAhi|V(pO_Z`&viLZ6Xhbu{b>S{z7xtn{QGa{3{Orz=pFO$qvzLo51~6ZKRusq&4{8wEQiz|Iak7)KWf=Z!!eJ8_ ze=Znx)Wg>TWDR?iw!an@kX$$o+8y-_W?srurbiNTEx5hPhJdg)>hZEHl75K%4X$0R zst(gLP-4iufSJp%3`RWzr7GZg0i#(bPN_YE?QC@%QMJOZ$OKbp?#P0jfzg^}7fXVD z1KQxV9?WN1+XEA&u_!JR5-_UE=fZ!lLJTa-mr+JbzHD& zJu;HHcR9UTz7U)1TE-o#wo!z4d;bf8XWX&iX$S)N3svi0DgdOKD%6U7S?fY*Gul!t z`R9~cwZhy=ATapCe`k_(w}2toV{IfHOtKEQ_st9;3f{6jPo#7?R)Q&pmYgqSqYBGr zVWbzpM?Is@Kw(kO6MayCUHmhWB56eGK{&(QW3)^Y5hB6AfZi+uVv?($b~V>`tGT{M z&Go%%u6L-pzCz9QP6gRgfb1`G(rzilpG};i@e@De5?z93IP)q_ZOIZe3&|PgU&m75 zr#-q}*z`|o`e{d{V-wx{ZWatZ;8w@Zw%KH}s>KR+Cg!kpeW$UlPyA7|0Oya1`l(N$ z{8qbyX4|se5SRAYi!|Bd)EDftOq8r zJ4msCId^)YUtB!cKTl8sh+3D+Qvr;FiJH|SS252DA=}J+N>X$se;co(}Yg4kk@PIS)H&ZDg?Q!T*9Ur1a7?@ruvo-z> z%1faaT;A0jXh|+D``^6`N`Ns+_Aht&DQxm}AzPXLUuazlzGeT_+x}=? zHV)wzT>=WxTczqzM8RjA5AIf}E%wxQwN;{mVTaxym5n0pZB2n}kNqeK5(dYeNOq^Z z+EycH4{g^Mj0Oj|zcl~0CysQO_EPRs+c5x96{z#S3 zYksxQ9EU9<9A5+b7?9i55rv)t!S#%V0y}ry*z? zm+E3ZyaeM~Dp@e>Y5T*YFsBN8$|VD<1ZR$cGuW4Qr7xkL!#1wfr7vdb?*SajCsKRt zCm^Gj0n!uy17cnOh^sJadcDTZ(P80`drz~Ci*8jNEUd`ijTUg*crYpTBf6o-T{7f-iG^8{Ws~&>lxG`H ztDb=jaL>%iuOWu@CBzE}h{AM;52TEy1jMj(i01@iR{~;qI>gNa@lFB)2Wh$=x*Z;Y z*q?yFK1Q#w*7!VbV>VDOC@UbQeSh{YK5ECV(NgqOnQ@eSXRQQO1+ zlG-B6&`h_#Y$+>oa)Xt@e~(~@y@jC1BYDi`bKETY;GHXQJq$}MNpd4vIv@axonVgQsC1hlv1iN5LqWk&QBCQ8Bx`*@exd zWZ%i;2XwOVsg&fGm|UTgh0&!X*D<-TP8Lp?k{n=i3z}{l-_V`>{6h3*11xYftGqBy*Rs>3j%zB7}o*=zViL?#Ym6!M+KbqTvKf0H_-DC z_zC3SAS>KetVpPuM!E4mBsuw%si#87;Ek%%ec^X_>ijIP85>=O^uf1V`Xih+s$LS;iN^nMz*pug4_%+ab9W^&D zCA`ZoWuC3^_R|&zZ>>yo`RN*T>PzvK*7#pxkl-dV(X>%6*E8lZRvCzcye~(Mxv*KW-5R&2Bc(!roEovGLxd8jW8gJYq2$P1UBkbxw z0AX}^stF)H{Q{=buexo>7^J74!1PA z4T1L(YknRUhYP6!!|6O*Q$saCia*WYgvro59l;;GzW6JUZLpPv#Jzd8;^1d*h zB#oR^nvIw4gMY^0c%BLdmK$)E^li-(#PD|{OQo<4^Pc(H#+*C({4}99A~z{Ws2{G z%KXt4p1{4l!_yCvh%Ar`Ud4U^tpv@zilE7an-F20h<+t(#IVS>5OPWYUXf`y!2oX9 z5yG1XCd4lBmwa#}w2M5^&R6Q_#QQ&kaQ63Xe6A2(#SN$pH;5Hfe0tHr9-)t;?91kP z;at}!0fP7nMW7msGgZ{Fd^We$92G4Qxv&)zAzC6>$I%uM1VDbqf}1hxEApIJCS{oS z1lZDFb1Eh)antwr+v6V$_`)G!v~PPndh;O+Mu>&r8}?NmsBB|*mr=M29&faG@Y0S> z7rQ8Y$InEnqW_fldiwCap8LnU@Ab$lJxTfxlrQIZdc0%BjbFg2JgR{Sg^S%Jc+2?K z2P7koMF_0j+0xBuRN~?o#F?a9&tf3RNv%Mt+P&hLgADTlYRZtt4qCzf`PYIM*#&`*oTgEFA7-tzzN??Lzyd;5Y%lNqjuCa^?2~4$&zer#@ zFe8B(xHm0Py&r z+Qzi03fDI`$n;;@gm*4*;FRD`fEWHUH^$!b^0BpnEwhaZo%LLmHT)xNG>P4T$DlH zJ~1joYv1k6FY1gHvO-rP09Glk8>4~&E)AP+pq|HuGyETy( zN>95Zk!Gi-%}S&#OHT_V(teqqHYbs`Ha%@_B5iY8+5;hwW+M5O^khzb?kv>fCwPhO zV(l%&@$=y)=VS>Wc+3i(h~5OM?-^nnH(@@4(yh8DCBig5^e6k3-=ph79!!Q-8x~J^ znhuXF+kE?N14PeZG_r(0j&eLnOz$YG5LZBjzMpq$#j^i&Re3HeM%O{gOUtmFM}Ce1;NgM6_gI#{34ako-z-De3*%hE!q{0lY*jVkF!~O9+2FI#s=0JH zfwo$zp|FPik6T&OMA2KY=Qb()Q#2rnpP^gnIL6WrlqTUALq!eLi!aORugRv$Ho$0^ ztEA7Q^3XTDCSTJOKScy;XdFFguV_o1s)SSF2|&e!E3@P02#Y0AkSzA{7>CyhSX52Z zn4Ca=jkn&B<`kPmB}ex_Sqxu*HsL*>Xo)C8OnNLg zCv|FeI{;Pcjkq&~ox>r>w`gj73Q9}Zw-(3P8*w%PCm*l~sM&292QL$|)AKCr5JOOH z|5o*r28g6ji0Z{eDa{oXKBAI|+t1jG&){T`#1zBc6o z{KG=3ZYY4-8m(Ew&0v!?YovwKGVqf*#jv~>vFp(9vjTn1;O>_)4>gAZgREeS8K~cF z&aK~r6J_I_OeB`q?=Hjj$*E)%cw!y2ng@)yGrs_s!MA$U)Zc_;$BM-g$6uDw@fVSk zT!F#am^kNiy=GeUc3LJ^9_mG2P~G%e)x)h>MP_gnx@iViTeC))!L`<`Vl%h_oduWE zOoTllzY`N;VRq%N*?e^P~N%1J{lAuMNx`?ccyZjT=b3KEJ;OR()loU%_=#&tqf! ztAc+ts+zor2!6!(qe@}ZXtZS-^I9?i+XSC!kT9|B`LiGjX`0v6RyAcneCle@_%&Y7 z?E01QdREs8q=ZmYQns$B%tvEiiabia$N0HcDerX2-3IYd#DSGZP1Mzf`=wsFr1ilb zh+hc{UR|#(Lhnv8aa1fbi49e*pbe}4Z*eaJG-w4D&Qgjz`O)tAqQ7lvo0!1rx5Oq3K zzQX)b@t>&NHM`~5DXeNtQ2&1)A2A$nekDFUy3NCQ)LA(k$C<{Ug5L45SCvP6jFjM4 z;bWER=~v(*TlMrPd~|9&DSQM}jVbu3-AAsQ&cci*puFQ!*$MYIt_j&FTiu@LkZ8S@ z%jlFM;8ayZgcsGYrz+84T>XrlI19!reUdTTHnw9?mXQOe z(kevlhFty@EfXlZ9mRAj%SI()q9;41a?$t5erY&yM*SO&iQp$IS~-^y)RC;muT>o| z;hhS`#~s#>a;-^uz$0{$5Vkl6gjt3S3xbGEnx@masdw$a~dU$go%dY02JeQNghjL+@*oxXJfdk9KO#@0W| zgsth2X>qao0t=@0O_g>AO4H$ODf@BhuX`WHF(w=Z)Xn#*x79n3^XCL762ruSjN@z> zyp*V2DoWok#U|D$+fCM`uf0&FD52Kr+bAQ(H)}vTD4>94;+G0P?g(Z5w zJP9X}#dbXp>I56cKFS#QM#?~=@LqD?DMZ=zD&__ns@E|`-nc{0H(UhdMM$C$bIclI z;ws`Sd?9)R=&>*DW#(UwktJb^htc?eQw}EG=a`%idCc}q(x{z=R*HW@UpRo_wXV!I ztD0cMMGw;js;!+37AsvVa#{VOfw)+6kZu(!2hVE-~cM2=pH`@c*`=T&W)RWQPaZBpZC{~llD#~^Yz9|R%bqRVPI zP{Awm6cMz?$sw5BAO>;B3I!{Uit&ZrA?f*-M}+gr_-u>%g+V*R^<56vSLn}VJz`1U zd;!NclLOYp5HVrjOuACbk}#o9q*Ch3jF#7xl;pVTg)Oy^nWC@SeVo${iDg@LPeZxo zc;2fnGVAl$+i`PETfE7j;H5OuNRP@|%0(&R#SdI{UXE~8adiMUd?-|?Ky0WPvTZuB0sqN|MlJ)GKWaz7L6I4% zeBL-~>zS&4uC2F7P;~&@05;4h5=CKE_I;9AmBkSc2UXg?UeI|+JnndX;TKUmS^=U# zE2skb9t#~}t$6^yumW~V{0Q&I$j~Gghby7=0)n>UK~@LE&QaM|BR~up2rmA<2(Eg< zITZ&gX;<%DVO&QauFB^rY<0xdkJc?17qk=YaSsZHy+^%x|EbT#m$l|hB)Jnj#Ev9) z$dV4>wJrin2kJTeS`?NB8k;HSWChy}3syLreBlqU<3>5MRlzTAH)4V-TG1jrhv46W z&G<$D$0ohtnDIOO&fTBG8?Anvp6Uj%+`sjf&#_ARBGeKf>QEVkchTSAJOn4Q>B6dL zI9$p7b~W-mT!p81d25f(-XX|Cgf9}2H8n$-Dw6W*lMo5X-;q~|@Zx|Q%Z`UM0wsfp z8bcB_C=nhmRyi?Kp?)OAI+0pjAFs12Vf8OkowJ?S{O_x4?%I-~?~#T5_wT~svK^>) z@ayWk;g@$Vm25k$Nu0;kUPx-1@p2C~Zh~30+A67rMvi))67&k}u#=s$ zjT4R_#s3r$Vb{IZiVwLK9ozJCE-+NFg{wgbcGV6OFRkDjHz^IJWr(_OIWbqakvJJb z%S(C)k1bgaX$0mukXJKsWt3;HkQQ+Pn)IZ^fq4iL^j|C7_HgOO4bZ1h2Zn^VuVWV_ z+5nVh*kIf6q>3fnX@ga@97gX)HNdAEP?OdGTrGB{jWCA$(6pW$XA7LNeq$G@+^tfP zBWeoH2=<$plH9))N?^z2T~}F5fY+7MkD679>1G+b6w$yknKJFgQf>SIh81;&QKrn_ z>~G+g&)LXb`LE2MgjsR#9={wj8u|!JQ1qWPyBiJQI!CWbSY?U+-kaT+-0ZE$MVy=^ zt<^XCdu?q>wg9pv(YJFTS9rofNbg7MI~{s=fwhbOxg63jD6#TIHg z$}$G4Cf5mS=!G(Mmp^KyvogB)?ZqDeG~?hiK^XLiGo(?;Jfl$2*gO14u-lyXnU)G6M527d+>{u>in+K@2TT*4EAY&pj39^9(sF`a zxf3mZlGdcxfjeHKMGaiwc0B}it_N`@N$SvJ#laqsgi52yLxQ%AKjZlrX3{zpEehoV z{1=)wL^fjniNFDdqE5Qx@4O%@74t7Yr}Zn?zt-;i3@A~UFqOYuaqMTxi&4IHe($2l z80mO9|GuQow&8J(-YQ{7Z`My>0G_zTgD7am6GDMtUL>wq^a;#2arwfls>){|T#hRr zT6l`Zc(w&tr*b8-iW1g3sm#PPAom2U2#X#qHTi6RALf@@m9Ns`B|R0nwt66)xNIl} zH0T%mW{wW=&`04xIRaAM!b3Caono98_(OCe4iy!gh*vf88pT@5ki!;8+ttbM+A$V@aucJlxg*oe^!c~|ajm*-J zBX)INl`21vj<8q0@KOxy=mV83EF*}Csdh0b^K=LgGOH34yT*=5(RsI=@Oo3M8tr4M#JkI|H`nL6-ADoq+akw zZAQaLW=^4uO?rlrW=8uveBtxa6IH~aiV<192=z~D%*{D-<%Sv1BfAqv9)UuE=V+JH z9%eGtS;L7zu5GsQonqM>(g3l*HpZ$i89*qWZCt0~^wM>U`clKV zMp|oD7RBHC4A>c8^n*5_$1DR4m7*u|WQz9=V;UW^?WMBB^r=idIbsv0QE{ z)KJB%kpgir_S5==G0{~6X_8OYqj6fI{J$ma19?>%D%c>;9z1x3DwfUr$CX|!7MTak zPt85Ci*SGoS64~e3Zr-3;#l=;gJv9x zOP$%2vb0COPtu!QWZmyEH_OV~AX(JaLNq9!1>o4Rp+Ev7rA>tltHa0bhgw0vpQ9Ov zwuUh68klCT72Sf_Xb;Di(VS(x3+IwFF#{1lv>d+>a^Xr>w>U)_EI=ygTOCEplEoc{ z5({K6(!eIkke`VM8nN;;5NQ%|i;7UVR=fRkh^H0~OUitzomq50a>bi~GwO@Yu(Y@o z?R$7S60~F?%O=r+Hqf~_L%b>eYBOu@3cKTPHVi}B?@$f#;0qszulPq&cnEPK-b`1& zoC)x>B+^sOvV`DyB&cKxgnR6Bqyw1fRYZ9Q z?_;wlAw@3Dk2EsEZQ#?NpnEpc#=&DFuW6w3xl1?E81y=iqV)X|4ZiZGk5f_9wU7ge1&OD#q& zJY42@09?c&kNTJL$GFei*B4%lEOzl0b8`TY&A;Sdt`gaVkoi+D6|1L-Y$jXf-o!<> zzbORy8*Tq0;8d>F4LE~~(kRwko^-X&Swv)kVew)_Pd!eqRm!8-960XBPd1$O;Rj;p z(KTl#Y96X;7J-L+?E)Z#dihyJXg)VUSimM-ptPT=D4sl7Ve7@M7wbT>mCBf z^ZbRY-f|@1m{a+T#l{rF=C8@?SKoNPz)44uFUFD)SlxGcDs! zLgGr^g^{_?NCy8}#v3Xrs!0hN!2Ud11ecf#cda6~0^Rw#R6Guf{w21yC<5O?4#X=y zp-L=akEq^JA|PkV(`pv3xd?sJMd4E8iIzQ1^&ZA%qEJ;dPA4_mIQC%dC6J&pYMe0@*YK(A6b?GDm7^KMIJqUONCN zs6?f`Vvx6=_+pGnZ zWGLexXjL!N{ghMdKC(Qd%CjIUAQXpAVi5Nlm0l(TPuCyqV^x|TEyib3}V5nB%I%+`FQ?RAGiL)#7<#6Yh}gGnrqv0Sb$$l7EKIk3-!vT?B<#VvlUicWx%!A%SLoQE%XU z;33M>a5;{|E8+D<%9^9gii$>oWkmfU^&==(nen$sphB`{j^oNaTwo)&R7O%g!+K7172~mZ+Pk|_V;iLt@*rHY|*=3M) zp95{jM`P=@1Rj7`N(zl-QR?WGFB)To-`LO=%eh{BXtyKox%20FJ-@O(O_^VotT||C z%G{L|fb--nX<_^bW{9I=Z~pgzp7?hmPxdz1jUJg;8_@Wk_;&!L>v!bM2_W?tM_o*A zBcD(ofYZGC{S4q$XX~=(!3*iKa72@B{0+Mw@`T?SGUvnaaVp=hVft|5Jcoj;3apYb zX7}eZZU`rnDsR$Uv)+SkfyJqx!GL%Vjbt;Z@?@A1J_KbKhnhd2i}HG==@&4^VP)pi zLsrQ!Q{E1-#K*m*T-$vLo|ibE*9{MLUNFKJIpH|&+1OQgzi!#m)kkE-pIu@$NQ-Uh z_PuhjS%fVr+eI-Tp8?T>BY;Oo@K=UjA05gAR>rm$g@w6qP+U%(Ujs`#R6#Sw6X1!9 z+4Vt0$#YAmBVIoY5!r*(Xk;(`7BCj|MRwzZr}4S!G`<6$ z>Ln$!zEhz0;V*!Xv4xX zqt0-yEHQ1V=U#bN@MDhI_yVdZpG2Pcd;E?Fs+}|BNG=krddY-mX>#yoXFrN3*-d*N zp+myk174igV!zl#;7W05$b8XCC4WkhB+o4iut`!RCzh%?d`%NexQH=&%xvbQ#AIBt zhMjdr#A=X)kx1wfEZFyWkPj;CyZ)#~-B$a+$X+x|*7$nKL4ooc#LQp;U-K}*8#)L? z>FLtUJoX2&M_Je(L?rG`K-CB>M{hXj$vYKsWDpg< z)J%#-R%syH@zL^?`xWd3pr&w9wN255&GAtzibEktNT6+tkcTa!M66p8K>}H2z2FR@ zfoNBz2;waVP(?nhh^rW^DtUkG3@7CDToO_vwsmH+@y-`ACkoLDykba7(f);@KVcj- zU&9$tChp?b&8jZeFK0Qn?sz@qDF7*R_fxHgB7B%@#r2GGH---)SX;k)&9J1w0N(dd zH8;wFPlzJiwH{N5#;YqVSMb0F10J{)M`$ENjaxnEB8$n;gLH!tZsQgfSDPtMCY%e7 z73{@l2v0{7R_nq+ZCKKX3mOEhsKxw1mBl0gm+6!c7EI^tg=9Lj@I|77mq6jlqiru@ zV0TR%%Zrv#dGU`#q~0^)Ry-15Apy0wA9x0m8ZuN&Au6H`2-v<%Xz>!C*xpAP3C8Wc zIL<-{s+F}W4#eX0!xCOE+sTG(rgBQYAk<;WDxz=CamsH5{^gq%{s&twb{~P#K(F6}Y`} zv4BjyZl z>4y=y$ecGZ9};D3XlDD)ZXve%4WNqiCgvr_W-HwCc~MSKZ9|?Q4Yf$Pbo$>J(RvwC z=$u_baVcnxj4Le8*dn(%nKB0~>4F>CM-kKi3Q4)74MmJ5DOuwzmzbUE%9Zt4atR6Ud6%k_JS8fNTKq=7`lUos{a*RHB-=e%2ooIP4apv_ zM+cR_U@cU;Pmxy2)y{xJ}&Z?BwEs!_*1CfIQ#W@6}K7k@Ub*po{v@R zNLC8Yt{5Liu%B?02s>i8nY!-!i}7sS7+;Qw#%{~7#$9RF>jO&9WDdLgqnsaj4Rs=6Irh-RWZH z#qgIcE5St&bHA@VszA@vpico*P&hIr`C^?skIBqUN22A2LEz~06*_UclXt3McL+Ur z$oPB*vIGg?G6!Iq01R>gYBa!Us`!JxoRaA?eN(p2^nI(@w=f%U2YrL3s2LjalZZ5g zkhi*!3tk7J9mt0?Y2s6S69{XHx#e|y0aH|av1 z^a_*w-nT<1Wi8+YRu#o<+xeJTVGdodOA*lXAZE`JMA zI*VNJna*~xo2}c;_KD8M3^h&$nrO400d5A~0+S9bpxpu|2s0Eq8FF=oJ*snPSdN>4 zdU7Yj#|w0m3Ur3&-3<9|hPhgftt0p@lAEio(Yy6;KM3fl-s%yPSKfyC^#jYlP>-L899 zVs_ZZdWmVX>%M;`OWq46&wziAUDpMM3HR}MPhHxx3^9^xDO}Q%f%%u%bybpUF-{dE z*CM;_B#8;fpTwxBU9fHJVI0`tUux4hQcb7z;9{az z`P{--S4bs?mNGfPl)H8ISCOu+!dF`~J@$@XK+O9ddJ%u|1`3>J;quHfQum`FG!{1j z`&i1_91a86T$44Ri3_NH<1o^87V&pG@w7fy@w6w7UF*bOix;-=8_?3)*$BDngjbFj|?N0oyZv1k_zv#rza^q<`9DBlv z54iF4ZXK(2;^~W3^_SM-vD=(@acCs?p=0aVL=|sr3+uNp8^&QP4K-)aw zx_~DL0fGxHQ>}59`6iuyFVf?`LJL#RFYt04;PD!phpjW_Q2Yq?Ot`GeARUF`X+L?O3vc7e`yMcjjK3)$hY9kk1bu~S64gs9y?ve6 zQo##!%Ae=4{ocNGh)g8gMyXEOqElA7DU)@|FOgE)vKS*I`sKGvhN+cu+E7(nMCE+D zq)5dFbo>t)U*mndY?O+(bbJlsQ-=&PQ%TCI|EvZ*R}~@d%#%iAy-q$()ohI$m%<(X zpp*B_l?GUosv&4PBlW&cd|fA&U1Qe`EWiTUof$aOw}7vf+I3%(h^)X6yY36X8{K_u zgMz3JzTBbLvW=4g5HG|Q#WwmQp2Sn&v{eM`2(4ypW3*1}<0Oi39eGv~XX?cF(UkZz z5=G4t3wy(9ok)X`gK#PWTSc9?j_?O0>Ioh7ETg_H?U}8kmN4pHgsSUAMe(uNdfCSD z=uZ4osmsgYM-t3ruv3Dc686s$JjCE@5|k3QA((8>W9-xSdARl80J?E3i!1L#FZ_)d zeBZjPji7umQ*W}qGpl@HPg(7!wMYqm4Ch#Mo6!&UI$lJ4W^WpDD+Vs;{T)9)eva}| zMqr?CT?KAmUe$9>8@NE^`jb#-5amzyLW$6wWpoUMo$#VkkMVAw=6Cxnn%Ecc1I*^; zc;5l9p!h|T`vPQ9MZeaH{u!YPPf4hvFaGx{kw%sshqoYo>n05x&~Df zeo6;5cjOG%ia@sf^)+|o4cKZ<#w&HDIbpD)pW9xNj@; z*l3nnnj0<6;~|waxnc;fR+QzVg(tw!1%1e+BBZ}SiWl?K@w^ke<$)tfYXYEdoq=a^N@Vw*~u zyZf0H0R{`2yZf3IbF2#KMmt`?idGasyhCqRdf~FC0;m4CwVMNfA8<`lGKycSA$Yyq zgK-qh%=N7s%+j)UcC+cVAwc0I+I%ETaE|(wC!4P{f7lNg{5sCKF(81>)b0Q2r_%mw zvAv(tdC)htMHhwSHgxa5vfy#~pzqp0AgPT>tX5}TbMbd2t<_2M;?-82wrQZs7e!h# z^W|WCSf*_ZQ7K+07qP%x_L@^vNucCop;KhoOmH7{KxtvC_6cAD*H zWdKXf-6$O;8V{Z=Y3RY!t<4_}K;$dvRNZ$~G{RGxfkTYhf<+FpCg<~Urv!$s-3F+Z z5gczIq&Gxd+Y17&{lD%w(4{-B(UsJ3AX#@@kgPhs6^+M#x5G=&VUWeAuu|%yi2c-b z;!s^rA&6u4Uj|td0P*xXsuF_H1CPPb1JA(_Xg%<4?!XUn^5}s_9zF0nPtw36m+rsL zmDK;#fp6=*|J=k%zbBuD0XN?1GvF0x)Y<-5(Uu*Fu4DMG{k_w?#2h&0&>y?&lA^ob zWLui%F&!1U+^(J>7Mpg=xt&Z|R|z64Sdb{AuBGcAd;=+$owdlnhN7 z`~P(WtkGkyJEK^inxYy3x+{u5O3MEf0c$h@q^@)X_&M1_D>dzN{Zq7G@PFI?WZF+9 zfMlj8DJ}sd(|$SuIJEB&M=}98b6+r;-hajHR_p#J=KksbU-h3tlA8Nx{Qoxho6vRJ z+C^EY&1jwmER5*s3*i?c=(0lKfY%D}1`X^Xa7!=15bof}s7ZiZG_aSz?Y#iE3Gfa9Zr8v$ z1jg<4qnfc>fcFUSUJYD8;8-uf9Rl1bz%dP6Lf}t&0p2IT`vv$D4IB!bC7zOoreUsI zU_T>lCP6EV=ILXqmiZ#Q+{7mUqi16jjMi@`(e7;Dy7AxO{^}~@NM>NXo&Wo841n3z z9P5WzU-%{LdVLS&;lRP@&hmvPVRMWfmoMCa08Z^8D?b_IaEcnzc;_;^wAd6SrEgtj z7G%M!FDbiN%6_6nJCwH}?G%^(kdMjBvejLqU@u959Ya`ZHC@{LM89vcnFFgl8S>+UHr4>o`3VbUEe z`kg*7zBAtU4LD$0)O;deIk(^*Dfy~0wt<>Yw+&<2hJZj;`b~Kw7QL@94eB+~!%DWR zziEW<$sjiF{mfUeXC2UPl}AuoSQ6Bx(KM7UGjKbuS~Pok?Z#M)bZR$4Xfl>D*_4_F z)s#_VDgN>wJe4Z+8wWDsC5w!4aTXPkMs&!Sd24-G2h-y} zWUMG7s5yYM6J7)b z8x+m3nsI?L&NebgG^@3ia~HGisrU-C z4+zJzFw&orT>hwzBq@UO;z$0`)6)-*=T6dK9|4WfD~J<(|TJ~s>rWy}rO zzYHEf9TCQT7f=Ck1GF=P%cjRKL=$C>4<~x!2T-_Gvs$-w8C62li0+!kMGMH3;35TS z#pD}v&^)G-#ujCjA^H+V->9P(xY3s~dc2P298l1gF`B-US;$N`x`fgBI-2uPL6Th8^rJf3<3wLo z89IXa`w+jO04NJ@_xYO_WyLqpj)cRfhNDD=gK9N37Qlawp%i0Kipib>*x#@ZnMei1 zEvR5s{O2fFuuZxkS%^pk{o_KiWpd@YfY^A;%$YOIJ%>Ns`5`WQ%gCM6-D~tZnCJHb zJ+}Ag?%oTz1org36!Hx8#l1xTyZ5q7P`0@T^T+ly#pS_i=i^Rfa8rWGU?r%*O?f!^ zDYxN+%IYf;J%=_neknc~y+>yRMj8Do zJ{fK6B6M^}7jh8Vca2Lz{~e!%z9_Yjb9Ev6Qmg!%uJY8>=o}q=Q)+Y#J~0<~5V7|r zJS*XE6cYUn$Vizy!CuOFPY1W4+Rj39&n5Vi892)>?J-}uxCZM{U+~`uKn#h|ef{jO*|j%dCK}z-?m3Bh)?W=vhgTRn z?BoV8JPR1zm(KpWT{|0=UPgD|o>Oe&@HIG~S-*5#2Qbt1IJ4Y?m@eC{4WZ#i_x<-A z&&WT)uU0&W+EEUO(CD73<0m8jdWoL~lpEdORq>BcLA+n$PX}I%?vqvgl&OgSrYZ+W zN8>d-k(fg@i)H1_~|PCPmI4r!T$}HGW*Z4n@0mM8Xl@fQ=>P+l+ow1eK54Hz>j4z%ds9A?6u zJl3SuOA(SVK^84X4S45ln(;+e;1-JV+nH z;x64w2wmLyfZ}^Kb1vY6Gmb+`nh=(=2U5})77J(l&HDQ+{r#eC6yc5^4|5(bvSJqm`C0YdInx_69m18rgXnOsW}S#A$9Hir z<9n2Ue)@}AE1nP9Wcf zp~63TEL{Jkq%7irWgP@%!d4YmT=p@B7MQ$4;9pCdON_{8Naw%?p0SO+y0!^YTh|iD z9szGAGez|sMBWp72(!U7yl8q6fEmonuu%qyW+o|dtKzkQE>SCgzo^?Q7&{^#W} zzDinXBTGK!1+27TpLJGGKOL6``2o9J{ZvvazVVC^v-z=E?Rrh<>F=MSy_i=DJpPld z2S5^_RQLSW^?wg%E+Y;_-U{SdW2Nrplv6IyAJ0N;;xlb&?=z|XCBNqceGev?)Bb5J zqu(YX1${VO_h2#$+mlq7+n#Y|zuNaQfW5BW(n{MnE4BTbn$z1)|Kn&n8ves*ALQ(@ zuJGXL0bCsAd>kwI_zrfgAXX@7GGf2N#=*K8bRT?Ir#^sGbQ2?g8j-gWt<$~!4H~Y4 zS?GzpCWqIX;=wEFtUKu)Cxu0+M= z*lg=+&f;7E=9qh&V#9>YpiiAV^l8LfPKq<`^&;M$%+=+AF$V;Pi!;y+qSi*Mg@ zpl2M~+4VQHPthA^wT!fySN##zvr6M%_ukJj&F7d-149JME&`|1!=~^HzH(UC#&NwK zb*YJ=@o5`v$?2D*r}t9d1lIRH)@*syY!LR6Qllz1_7;Q!;mpRUoWOf{$vwIFzrIZ3 z4gs0Yc-lsJGQeg4q_nS>`lY|qQGf6KZK0Dzdgo?;f0$mLZJd-`UsZa#u20RkGf15u zLTYj6#r0PlNo}9*yUUM}zZd_3#;PA+8BmTHIkw!wg3ie`V&|erI;RU{6xE;yk;|2 z85Fp9JXkiKwTYb%;ZNE3C%tz7wu(1X;Xi@4Kpgfp7+usqz#%idZ=IQp@6Q|4#?Ll7 z{*^QyZ>OjCjxQP`g0y|%KM+yC1%6~rMiXv8LpQ!rbralr9)1^=5$2!zz=P<#J-6+O zVJ4sR=54L~?c?vft&IV*YA^6wdnDtPC&%1BLhfQ{mkw%fy@le8ZcpIvMt5;wBKr2t zBxJ&$b0zLf@3Ct$F1)#g0?*57__d7{>>t{dg{~!K)o>d)#!1n(ajS;kwW&AwUg*7; zrRSrWXk3nic!wX`M&l<*_??GBQ|6CtOixa~K0WE+=K^N*9- z^N)>b?a}om&98B&$(>)HSNr8i&`e1QPwPSeV2PhfZNY)g zDDnOGrOEhs`*%m}M%CK`SHvbymTM8q-frzfvN?tHnI@_9owmN0HrR;QYXZt@P&vZ7^h zLW0XJ{3Dl@%9G?b*$-&@J9-p`|9`m5Hg1}kV5$BNWTZ~^%-J{3fNuY$yY9F}JI|sd z?_Yso(r(a%pD3}vrX7CL$k`lLJoGB|Ht==4w#UNh1I!mWj7Hfve`UYm*d7J6qjgH@Y;~hU% z&Y_QPh3cfX;~t|L@i;od0d6eUvu5E}_k&K8a|>f1S4lSttxF+qon{^!v0ViCz@VX$o~Sa0frAy$+Ic?u|`M z3tKx!s)nn6>`b&1^Eje}Xfrd^9t7X^tW4I`F;=gvLjjPTK>*y~ml>-Zpg#}Ta8vM9 zT~r94TodOYU;M|YB6dnO$zU(5{=QCpp2`_q-Jk!*(A@q#1wo&k-G6+b4Mvh*TwYud z_@vcy61ub+UBaHag_WVmo|?5?zm)k${^AO6@Ka>hMWFFBO9@B~R?^IGr~l`jA%FE}o{2s0tW*c8Iw%#(NF4m{q5aXx!0 z#aV6aoC$(WFDHo03W6QP=2mb?MCCFGc+BBWQ!5V$c@m;kb5u!u{wDeRJm61#!+#lI z^+)_$pz)XMwTQOVnn3_ohKq*(d9A6X`{taG&rg)j^ zG@iKes+N0)CB>PbH2U zQ6QLChx(BTubG#ASuW~tQygsvLEw^#wfqqBA$yyRD5tk}a07?xBy40 zW3O!ab7C*@lCF9PG8dSl+7nOrfDJ_Gl}3Er%o3K}jSEo#0Ta|SOP`yzLt(N=ITH*6QP{r;98+f79O!kY1*AkIdUBdZx5cU zq3!~dZJhs4RoLmso&>Jee-PkI^KQ?~+AnfKfiv!zKGXOjCvb}Ifu$%FVXrUpAtrWW zKWK@6C)n$dyw;ER_}1^l1qY)o>riWsuN+tZ{o&C2nSoJ8RX9_Y!}zaL^0T5Pf#2OT z1%ZN4U^RbgeUS)&x}F99kUTTtS;PDhqELz_ej5vLIZ`M4?b1 zJtKB+>Nx3ApLI)Jb5yC7EMhlWfNRXU)RBy8R*kY2EJwL~^QfA#r92m!m~ksO<9t7MPD|jOuuii0h7JgP1%)EI9I^t>(=Z;fLhc7&m9HPo=3G0$I0{y;QX30#fopaG< zRVjES*$rVIVIxp&t_Q!i@`r;@PJiJ8`q$IW=`PQD-CCir8xWsRm<~_lbUc83H}1W*&;GltNsqq2&Eud7{rw*-B}P(nw@Gq z%FNv1*KNCuEF3Pn`nYZDIjXYfe~Ze>WHK6hE-z)&`Ktc3)vBEXl3U8B;9tP;3B*%g z(0(0g;RS8Hi-wIKWTy0`On5SvZMIlev(R$(OPYJC)7<|@-rK;(SylPtPhY@VD^sPe zh+P$2y>niK| zg0cdFE2Sc-iY$x#d|T8mR&A)Os0jSnW|AVi|6M=-&;J*tbMLwLo_p^( z=bn4+xi3$dAx{@~^+ZT7#_5k@Qoi_Uv~7}At3aQHwYJN_TrIw;wwMRXJ}2n$cnLVO zeiKX;+{dtd*INI!!4Rp;5b1~9Fq2wSGitq&wf?2n>ZNptAgMe=ox54+A@rVfQQbTP z)x|{h1O|-z{lnbVi`9YX%UWm8IEVxC%wyjTQO?EoE5!Gysrm&XwODA^&({K0|LFXl z{W7aRk0FAww=_4Gliq7NaBvGTur!yRyCCQc;#mcVm*7OncBev)*~j|hGD z9jvEz(WctP$@_CRQh$>%@8U57HdT`4`6>HU0ZU;R;;ZwWyarP!)5E=TThY`O8KExz z=_@fzDxa_XH`Axg;uD)Z_79;AXX@i6a@ploLSKQ3r*{*2(U|=TOs}OID@GsZN>jeC z_!Yh0iSH;MWzu5b%}+un7LsMRO4e(~(KTmB?zZ$JaN%(ca;~TT?EPGc&B;FQfWzkvM3OAzK`W+nNpy$cW@oX}KGhNZem}Xx8@H`m$$AP3dxu z{nu@}mF>&C@x*ei*tBz_fU(0Rbim;Gg*O}mWny-n!HbM@dGRSbN9nS zlbQXgW-I69ZoEWVi~ekp0Qv)sfQ~JiIC9n34$n6O$FxW5@{ip<>2#&x#m%|5}@FBs>5nAPku-)1EC@dg^ zrY4>pKa@Uw;zg|TR$z+(vCP#H8{PkJzVW@No?iX873@EJksj?t6PDz%=W9qz8JLxD zK+-GfF%iIWm!l5ak_O_!) zKERJz_JadU*k7&#@W?@7ix%~ha9Fgu-sMNv=^EHKJ|>p&+isHH;X&J{XluO|4CQJz zeRlrlMdYoaJ=O>E9kRho;T?UDDRa_G_+=ZnvguA>rhhADG3q+`0ruQrx!NsN}Ng}BHpD^ood^YX7=$owK@w^=4W^OLqEotf<0jZ6H^Yc^=1gTDK0Jp!aB`FPA%rR5 zRnxLbb{H=N2u(B3P2A7W^i{B;%{Mqb;`6PK!%6uP)<^g>)yZjjD>VBaOKugV5!6h3 z;E%M-@m?f`-{I-AF{_bUZ!w8GX?5ahN04H18Ea$w0k&!SX_$utQ^Jqa90Y3EUf~6& zWZr}aJ@Yq%G&0qHZav&Soj|VxQ2)jFE7}j4+E<3`M8q>6XvYKR0A+UTgGvo+>@-+= z1m#Qp8QG6q0iKwzbmd-!l6ZaLjNIfrhF}c64g)p!!0)~cX~;5_e^Xhe@{ix~{Uw5h zmy7eQpPI<`pxe2u?;7w*ULDR&zJ_6W3u+$5W`@jIE9CtZcuKyAbUHSiImkc_t_K-C z{A!atr!)f$FEmZ`yWBhoIHul zbMQj;++y zgW7HCelEuG0zaijzg=<@YVmj?a_{4N)Dxa(lyk3xS+_a=g*4%8NWOzO3JrPAG~~5t z$TYtvn#+?E6FKsE`Z54aVKjDn0(ri|JlZjUzD>|36gd7O235&;nPtApF8C6Ma{9b{ zcIXE>+P-y1$@bScItAwG2Qc`_sbAesU3nkH==k4rwF1-NSNEUh!fqpM3ZMlp=z4(g z*=Woa6MLS5onSugklS+%!)8C8aN(#&JH&x{+r=O#znrPj8zp+wMpKMtp2Sg)PFHJZ z%dpF?OS6?5F}kvgq+7o61R8m~2_+_`3YnQmNuP(Tz}l@JB|LsMvgNaP7&1Kiks>nW zvP)0}^wJ{WS-{CijSlQF73%)b24o35Ib8t;FdK3K<0V``L-cdfDpq_eW}^Jvi}oQm zRX?AAbPfPLlt3m`;r!SFJU02U9v0hvX9$YWP+*KZib_ZW7Y-%P27Y4kTyy9G#oq zi+^7YPaLR^5I&Q{A)MWFtipF=qlT(|H{B|!$2R)*R{=(|{YF)n>BXBy=IinF+!jC9 z70;4`%gIS|?%?wmaaTuTae)#d54 z?D|Y)%5tAy-U!j&<>#laVdpT$_O#Fk9dFJmb)@huKKjyLr1gx+;?)5|Z~cGhov7aqnFRp9k+d^_;pH32+<6|Z9SZF7I) zD|?*F)!IeA2j}nJco>X+P~UQV$#)L}{1n6So2#EcncL-uZsa+*r5804>7n2FUPtHJ z5#(BsJDquR-H)m#^7FXK!P7!M*>5qs0oyT zJ}j8>uZ++px)yzP$1Y>FAPN>yy<>7Np-~I_kUUA;FJ+d-;_6_~#&jC-K4W z)*~nKI(?gV%sG^O@l~UD9b^cl9QhFP{hZ^bFC&b!n_iEQ*PbvG|3Rft zyos{Xbk?Trkd>D>h_)}C{xyCJ^MxHh=KS!jxd#s1jp-L%em~IX#46?LDogMzM(XRZ zi7o2K(8IMy`&U?dbas2S-c6s~UVV#6r#^Zk!sr;s!`sl`T=u*O*{=OSl{x2RmFOfIUOEeA7XXI{3e;)04V)u$o zw=F>CJ%73XiR<6!7TCv{bNi^i-C)t&_s(vdTjzmbm&f_g?0QHTs4v z+52fp%*p&bd;bCi=4O8UwXet?T#3I>bsm;ipwIgb;kBNU^qJ@DFj-?w`!85V`LkQ+ zZ<*S%oK58sV)yjA)$iu6Bqw!H^~-O8cSIO5ej7W7X$8aI%Y{c*(rJ8bV%u^ohw;YK zC3DhmNNvrw&G#dotAmO=HZd1Hz8xTZo{sB* z+y8m!7Wzjm#nSKhl=j#YXx9Sn&qk3SVbp#eRul-$&5WD!g85?xbNVx+B|$DNmo7hk z&-tK0<|*HUjsEDfB;pt6Idk^mK;rbAUqAHH84vyO+*QAxI1?=NJy^F)bCe_oAt|6! z-Eth0#?Lv?L&woOoRywxDr0REy%o{AB?4<=hO_Sn+fQP1Fnzl3-b4A0H51#R?12Ga zkZU>%KW7;XP3v;)OMyFk7@u7^{!O?*z?fUAu=|Au4`i=D-^siNKNo@n7Z6AsSFF5` zofyE-2dcx-BaA^aqf19#z`ebN550)DRPo3HJ_W@p&o_0|p=DQ;y~47KwCshpERHfx zUkTk^tY7ey2}Nv$AB=?;(Kmh(vf#tczI)(qnVa3abk44`HF_Gy)!wCZcP-TT=@?cM z+x=3Dir@YlU~{?X)gFL+ETH5(e6Eq4@vkEjc}%dE$4@K=kI~%+YtQ+UJT_7=gU4Vd z(Sn)a$bSbv|A0+7^0N;@tNdK1{5&80+)kkIbNMUeiQ(rm%Mu&fyp%WYW>iBY&^ zFumZ+&EIOs@7w=Igr?t%e@MX6x#dczJ`(VrZRbp!>AM#*jF}p6R;Y0qrVG4!rb$3z-&>vY>P-)Fh+vaRxK-tm%x#Q{TQx$oX3TitFf^~&*mRP-+lKRNOE zyug#t^b_+B)Jg+ftQ(K)y|*wg{WqyHzTru}eE@QR>M$p*R8>|6zP*P)QDqmpjXvcV z@$zk@r9D+y`711I_*Q1il5Y<}ti(E<{sNtfYA;^%Chx%b5EC+TI5JR_kVS$~gRqaW zf6#Rt{c*1H-5Xc{S=izmUk_EiE2u_MGe&~%=6TR{Y8YLiW)4h~@6&uL-p|fwj~&6d z!61Ea4)>$5``?9a;(|R0^b7Dv0a4zxg(yYzb`oXwMStcHByJ1ag5OL2S%0g8`n!%x zX}~LxnZITD;qS_&`n&wy`s@F;{w~GSolHN=T+&$bRgEtmz^}FEkiO_)g)i8lzw>{> zUt`%`vJAd7?So3KSbBUogO;9e{~}mDz_A5ISl9npn|A{LbUP|5p*N@oMjS&bLO2c1 zHx2$A?dfNG_%-`KM`iC|W!(Atb5!oHq{v16UWM!}UGgTI0 zWgnhlZ~Zy?8D-UPk*dkOEr|Y)GBM2h?#9tIJ>T#@USEjy)oXp$pJeZwKG62JbSI@( z89kA^m;R01%?|#hR&K!_D_uP6&cxLG0ya2*IF)@GXH~d*v)4zx{wRi2SD?j&o%rttNcB*~>8sy~a&(f`@HRr%F1UENodrWfCf`$_1ZC#!h!hL5R4BE1i zJJj?b(uZuyegb7N=^D2R=qdTD-TMYQPh}tYJ$B+xW?ugwn~l4M1wTse?x8z?;`uZ_ z)j+N2oLE}qFU#FTdQ4k3Ip_KAsfITncbys) z0c~43f3@lE80v$w%ooTqglDbr@5vk+m~*jy`!A8g9hBE$3%>0>W-cV|OJCqS@ca1$T|p2M z_obI?24J6W|Mvtw3^@14v0s$WzJv(*e;|w9!|i8@or2x7{g0wxZc@6V?*^QJonarw z5-Om#Y+?|8Gceg7!hlEXG@6P7+tPBdXrbH~IZ*`Lmt_;vQ{Tkf3e z3;dd)xpyuwp#^s?Hlf9L`c24x=N1X=`})2+_i5;{InO^l#{}m-|FGiO_t^aBAD(ZZ z3!Z}EA+$960=`8b7!Xr!m&q-uI1S*g6_!ngr ziz73L#ue%KQ9!+%uJ;{$9QAlPUEw>pN!VB5^k4c8-U_bZ_zIXi9z-xdx$hy^7s4Oq z?-O59{(j~L@Yhy*F{+(D1GBVOf8;02Aq$)5&YKTpKf>JOJNO!D)}sW!dM?372tM#x zY1(Fj9m)MUfH%)!aQ`kz`zy3!`mdR}@P2}6=KE2tx2v0d2l!T-r}p%PzJpt(t8UHd zH~J1{EqX^ zflo;v_Y*u%z{ddIJfFe+ILd^Ey&7rLj{%yW{4lefCVl>ADSeORcnaO!e7b-?&eE@9 za6c|;qx79fo4yrLGM_6nmkT#zbRMW+N_}*@$Nfjrep)Bi?Ts zQN>22h3_5_dmF{$;4107%V^(tK)|=5Ze{lVmC~~NNXAtNVw0RA@G(%*HL&*~0(w#Q zr&nOMl|E&Dk)J$z7?3jwq2Oem%1;WOIe_509I|hoCtQ0LE{M(Z5zKrsKbat!9|Gdx z03Jn?c4g#Xga1w=d>XDANgPkVgQQQUDLC0D8J|8hOgD`1b!ox+&fHr35{~ z|3d(L2S0)~D?#@^Bsrw9hY>s;eIt&1cvZsRNl$MV0(kiK9s%b_02!S7Gtz6J^N0jJ zJm;4oeFq;X#qmu6PZe<7Q@}ypVwZT+*F%uD!P|lFDuJ_R9KR@C>6`0z<=+ckc}jvF zs(nK;|4droq1rzIY^e5kQbefsVF?N^KO^M#=)AuH!05c2Bu#YQ%@TBHUR=FpHjEmu zqgT>6`%b@If*!Te&TOhSswGX-#zqNxbkj;^Q{D7BNfX`ldI@?usT6sEz>u zPLd);^t>Mc-$80GBN|E(5e=n?r>fVB6s`sFiw4y13ROK*sOl%BRXr(H?JHFE&yqu` zx(`9i_-Ee*#`8r!Gk{N%9(&0A9MTM#e=OOA%s-T%hs@t(HYM|yBu&VCuLM23{W!Df zeD*#`6W-n`K@T_fGMjQEE@{Gzs02l5MoODW5ireclQd~&vjjbeDFO!Z1(GI+mr2mm z8;XGGjU#E&o8L+Op58peW@>M~Cu!1~CkxHgrg-Y#OvKu;GC?f$Yg0T#{|m_`vaJk} z-e^-i_5ZR^zcNJX*QR)SbA;KHH_8y{&F2ACE5+K|_B}7&y*h@IL=(8Ca`zd~OIS)= zf(J-mZ`V`zaQy(_1vrdxG*{;?Vq9DQ76tVQ6aWj;MvCLZFc+aoT=cQie`VFr0G7!6MQ!!n9uUP61JOj;leWzrfa%4 ze-n=Yuv;V&U#nvJT%^m>s?wG+Qxg0X3m#X#r0}x*O$%lz{8gmOld4EFMeYMAmwgXe zcPQO3aTnU?Ox(?QE=$JaygPrU=h3*ywvc4tNZl@ItCIp+X+UcT`T?dgEj=OPaN_P~;M~Uq@NpZ$Sw@`{NtG6UoQR*-fw=xbYtgyb1)D zhDP&~*MAPPy*L@R?j6Wa_An|AhK;_153=i%{?7vh6#LTW`wqbM0?^&e1*2_W`b;ya zeOI#n3*b1PFaCwczo3LKH*L1p8n&SPtt`*=X8K!u*TB|f4P0lYANC!1OfY?fIk?75 ze@4zqJDmVV#$@%-ea%*r)b`X-r0GVS?Lr7Y-@`9^-S4$YkAeE?m8V102m@&AycV)9vL{}zJkKP%i1A-_QXB7SXO zSm4)VpJi{^JmJ@!j28221gJ~+HIJZqGx>Ec;Fezv|D^o7{#unWFTakmmIA-7C%R&O z{gOFK_|*a!`PISf1%4f1))IbQ37Fy68<<6Tv?6Eq9I9$=~2_*KOO<<}T%)3sg^ zzs_TpB7VIWwG{K~9n7Qr+QQ(e_ysG!h+m(;BxA?dIiF!~U4FgzX+(?pb%;6U7LBhU zL9_5H0l4MY?GP_&oyQV0`Bfn(A(=Y99%HnaUzZV7!mkgZZRFP-Oe^r~hiq~Qzdi|= z;a5cJLI(@u>t=#x;n!;bpOs%X5}oqvYpiV+eqGBfMf`f2*owy2{mi5Mx|P8qe&Mw$ z{9T3Z&OM8G!+0X_oKfo>av*jQ3!gdNuy7X+Hh+o)APc+qrt*_p85I^b`VKyda{0-{ zY_za&t?$4^q9Xr}xrBv&qauGISsw)4=oM=Zs=izRaSR#IO83%Ivf8b7x>txR{lk%DuDQxu+Rc?t~lflk7WL`PRKd z`N`dk3M)7H4n8FO*@B9cl`DPx@H?pgE#?wdzQM5a`;zsSfb+bc^6%}?5ai#bv6=k4 zix>+0YhxY7{Cki&O8B=FF!ImO>;?W^!>lFzyAUwLzn?IjI^&?4m=Jft-9jf3-J!mK)ERz@9yoRLxQd&jTz zbjFE~V2lu#aOnGcFM;chxP(LB*qhY(`%C%B>yYWh{rSliQWM+p>Amk1TOspdOmj^A zP=505Ociz=^d0+MAaVB;)UIU3>FGXz_{nVm@S=Fmyld z%^$KON~I)ePAX+C&rg05@M+$n%uhz7J_v|!oaaGkbKXpla_SP6BBwHM$WOio@aYQ) z5u39c_8`75PgHLZR9|ClDmuK8s=jL2o7XZ6?=7gy8}{bY#B`Jpae2euyq|d<6ZYN8 zATMCfVsC;e)R>EP1zH$~FP_v}y~@99{+`{Y(6{>zjtNt$2@;lG;yd_l0Xb~0uymF0 zK&7yBlDUMXe_>d9Lb84qaNVyWKW~SEaQXStz{~S~E;<^1{KAVTCw?{Y5@z4ypZFI&ns*y`&FtTU z1c>hl_Y3QcqQC7ADq#O6@=*47;W2oeFq{CpV#`N9oj**T31?uNx&VM5rj%pF{*W>^ZH(>VRnA|RN4ZMBKh1v!tG9Ra=>}kl=m$8-} zBB?JEB=yS)X%xtEfuz>Kd->*p8}@vh6(3;5@Et6d9P6}<9I}1AKvoiBSyG^}*@wRL z`4{DkpKTfK$xDTZ^C*Nrf=<}mlb?KwAdVs5_@h)42mTdE^OLOv>paA-Xqb5jV-;zi z{3vAbBY>JG;>Vw5pBAw-xvP&(KaQ0AXlzmc*(M_DuIt|nelqT4X1 z6X)epGR2Z=$kYHpCHg*sbkJSEQldot`N=l{KK%wlM2TKkOn>+ri1oMd8>wo<{@@Wp z=#5hKiT%N6iGv@#$xnWVjZ>X_h*|9Z;9eH`3?SwU0+YW)ha0uSsddvm((Dg2(*!cP z{u?`f?D-#j18@HFOF)L>Hv$12*>w$c;@vYBgzH}HyH~C+oc?WijKt-89{5k;>1e=d zWjsZOI~mQ7>gYn7QG_Fkjz4moZYucw+`Z;`FF|+?>&0li8VwiM&vA$ShL>cZb^8wd zQeb}+m}t~mGZkm!cQBvm$<@AtdpP>CACP<`P5MnYyri3r=S#|ENHJvRJd)2Qq39^r zjK8zsIVf0&wgYV!$LBbh1U6s#v5Xn=Nlk5SlPulQxK=#(7F2pk5%V+OG zntrt=dkaf^Qc8SETCFqH2LZX^B^fpUfCuuKNxoW>Jx|ci6SOJGG@nSv^V!Wr`gXze zTFIotx=k|aE|GTP9mICAWb9UKXuWTIg<@k^Zi?r#-(yCeCb7G9b>Q`M5&$K%k%v)0fy^R|7skHaP*ZKjrNLAoJ10*Ui{W>## zCOcU6@1^Wz4E~h_yNO1%^MsT^wV5aKliy>OQOWXJW>L8tU>1s9=CfE`FiV$Y`4oa? zW~gTtk@5FntDV7Xn(i!)oQvoYy=4BJ|)y;104y z&QwC@PH`p62NtJ5WvJBFJ9u{}2>Ry&cTkIcUCMlnYPt$gf_i^LH2(z9fs2_j`wT1u z?!7&l%l^Uyk5t0CxRWUH8jSut$sbtjo8bNL{!l*mYX(|Bn9t%~C<@=6pIpX3_pSIu zBLl7P$!F^%>6Q~dvC5kG`O5JLv{Wbik8uO+JHJMhBdYZdp2qXDy_h}HPvmj!0G18r z1$#@nz}>>bf%sM-WMtC<-+^~So-{TA8ZDl{Ta9<&CZga3f7VLqxmeLdQe-E$`%ch4UE1Iz*3$ex&c;$yII*+;X*3ykxn zb-Euo^(nwddkeg}pvB_coXW3l zJnTEjS&d`yRY;!RjmW^QFWaR51A_*=$-d}h&d$m6_-C2?MjWP}1E%Ze?L2hJMBq!) zKNI4;40ZlN@$Em9>%Py|j%R`H(+3*baPl+osp%V0URpcx&_mPbPV>W`dVYFq$$4lz zn}dx#id`<79zzHkq#YUr57!XRaS6y~(J6BGnj9dfinV9%8xHqxr7N`Ew3W;J`IB(Wj3wI|}1t0*laL+%aB&K`U?i z=CfO&#sS1II%dbCnAIPq$HTy<^}BIjJPCi9y|nsCSgWT1|rUOE91 z0Ji4D_q@>m4e0dmAsyBdxvvM7$O!<{-y!dz*z+UV8`FkN*=I-w^y;f9pPRg%a6^K- zNow>nyUfxw`$v=cgG`#rWuLG##L{;hu>54-20^eOH~AP#8B{}pe47XPHevvY^4Xu@ zsJE}-*?jgF2v~yr?k6wu^y>ae4u$Mvo@)M5P<@>cgZwpu%AB(R(KoR>@BZ0~C-b}K za!r2jkIAoNKsSCn&|z%=XUp%kGJR4>HTnzWWOl$(M(?V9MpT166Jy_f$Y+1+X>6M` z7Vn)GH8jnVlaCY{I=ux$L+yuL_AubnD*=%C%<^phcJORBM^Nz}=I`TZy0c^IhLs~6 z4*EuGgWbPJ`ZjE!`XOifQJ*9FQJ?N-&G&r%HTuw&Iv?2iTt4$`{_5kd`86)cj_-tz zaY}-@z_Sy9$b~T`%Ud*=0(ZRkKSU`lAUR9Z>XGKrH3fex2dcDRh3em#uk~1dauMpe z=&kcD&z^bcrPJkVFD^=6lx3pcrOeNt>p_e0Je6hFl%CRd(DN=Jr52pZvZG8p{sDj{ zq@xqk(didN9c&SGBJGh%$c;8+o&K&QL#n_}`JT>m6PXt$_WWLC@2cDbpBe@QPo}T9 zkDbS3Id|Vh!1Gwv<&GlsWquthS3CcOpYj2X+$3S3S%HM>meX82zVzosWRm_6wf09! zp+!fLOZ&rGq(4&tO=SOxXeaN(ztbrhK;Hg*iHRtEJ+jIf5*c5%KZWlD<+4ADq3wro zCMf%34V`^_koX^(_}0XciSOHw`sny{`S&c5pND)LCx;(;>D=hANsKS@pBMf;zvM4+ zt9JMD}NhPE4M_ztcRcA@6J0 z_GEv_L^SCDvQAf8&4K=wynjVS&hvs#!4#ma_51wY)v$mjzVk)Ke)IABC=Tg`n1nD9 zwVzyd1f;3JYfH3}@^>fShYs&~3aVuwwUHa@p@&jHu}y$dtp=I;P>D5L74b7RfU60qjs%fp{FG8=u^h_qnF` zA=}X4>go+u)ir(V*H;g0+!$V0Jy7AahWh>OL4OZ;Q9Cjci}r`o(L~%Ij)vnGr2Wx& zG#w4aqSr~kwIdAEEA6SgAFac!=Y%rdXMPrPN%jnkxVUl9Uz>grc!bGU5-V{VP)bl`B#;E5fVF{OM$La4?dLg#9ZrNT^xp_g}Cg zb%C>R;fmD4g$~_IyPS|z*(cQ}r72OZJ|xxmnpmO6M${MyqYW&$M%ukb`mjb@ zx<=crk<0v7h5C}w+N=FFezd#KNjg!d7R^8l{2{j&$;b$hl`ljVbUQ{`7E)9GzDRmB z5{dg`p_DRX&9#|mx&|E?13BUe#{p5;KXlXYztBSo11KT~iMS$FZj!W{e(h!rilP6}@Q6A5WzHsmusT1A=$Qcg7Q=aiL9wZE*TSu~=WIf2Xr8 z&{@|W3^)yey6z^YxvjC?*`q~!sq&dC|VjT8|GT|ti7TFc; zkNBG#oLY&eGJUDBR5~*3HnR2lO6#LO%gDr zGW|m~N?B|liNvK17#SlJ3pCN+*4@&AI!zx%WV;)h+j|>316Onh+Uj?x7%Qy3v$eL% z>8^Hy)lPTihL&KR6VxBXS~bQW#DY75Oydt?3_8KJRZ?PYm1JF8C3)6XIgOftA12_3 z3Hb3;UB9)qtu4?Jq@;AmU4HrFnc==jl7eFhG!%-*Be7Jur);pcwWB3~=5RbpM;Zd# zn(G6-ZMCfd!xh7&P>dosMhS^K^@&VOG*dr->4<+gx*Ju+5|D+iL;^Y{t{ICMonkdY z<%Yf|?cByvhBB8x-~HB1x!_+4EsEMhba22;3%ly2G|YY$W1eNiDIxc3Xg|sy;D15{vAX zxa28SBFJO)ND6F%aJB|}Ya2T1ThXz|z(BM=8i}Xbe5bV|(By9kje#j^MN^$ZAF*yt z*S6O9D|W9aU$>h$npd;6!$0Mu`xgBA4VTmg#DHk$Zy-WBD}gUn)b6< z)RC6YCfR9<#52)&q&c3B#2}}jd^{cPuWfB`hDOWd{UaHX&W0TrMa}iSwH?iFyra1n zd7;IrZzKN5F2wvs=?#TA(_orO4N+M^*E#`7zcv%eh!6~5M!*~!)^e#;g(1YDXRt|b zRlPO-w#;xxA_|K7H~Uva7rGrBgrq{1Hiw-QC_>UWbxyt0-~^mTr^(ssG&^r~E_Yg- zR;SHrcRHLaoK7d`K*KrPob67Jv%|U4sdTEGwaz+cy|cl&*r|3lIu*1gGD$QXXh(n( zvqNem)E{xWLVZq9LaX5_zskAVd7JYVXOnY*^LD4qDR#F);WRQk^T(Gu{9DKaatkIP7w6zPdmYMV#KK(3`OG* zmT!x3i`FOGVJMn*zVNeIE43aA<){n6o2tN^IbB$JVN|5!I{YIIH`!AzgT4c3(w{VE%Hrw#0}0SdIq zUXXGFsC83ppxy==Y#?9*jW*B&Tgf1}#s*f{z$G?tsSTX(2HeoQEa+WssK$ccVgot~ zO+{NQ^gJ7AjSNEsVE&sNh<8S41$h9N`1poZwK zD722rbI}@iSQR0c2*wvQrpZ}{3APYx?@x!^mKk2#oLeKiLs0uu+qNSX z8dI2zoz_S=8ZrZJ`}XZv{zWksLb3i#Oa=hwQH-&qQ(Ny3VuY}gdcSBh{8HW+Z%iad zL&>mYl2Kdl?~Dv2BPq#Umq_d!4kdS{u(qR`i$_u^8Ki|MwPG|ig0`8STwd4E9K*2g zN(>IdWU^5m+a?W#0`Cw_5sO4dFz08IDVQHL17JBP`lDh!figp~24az9U~L5j4q!~urs(m$A2&!h6HG=YS7xXj&1I@ zCa|cA!kCB(VP&~i?&2y*4He@nDv8Eok-<=GHoDVNjYAk=dqDy*c>OV`QcoKK+P)$Og1?VO zH)Ya@UpY)Nm-QSoW}N$zSh+&`c>3Kb5Zgkc^|%IL&le+hoRGr??RIK+vm@~^mLzGc zOJiId!p9PJ>N4pxip`d^6>gB(;HF4CG|X{bK*q(2J1+VZ?<|>Cq{`&~wEGL=@f~Kk zd50qKxq}&MC5+|t$OsukU13(^SOj>if7neBAE{LQK^Xlm22Gm@!5r40-Xo-0x$4}W z7-4^;w7V8IJccqO<+(ifH`IYf02rO7`8}x)CY3bTV>M32dYESTTX*sLwN?0cL*<6> zhV>U$;1`x*MMYT?D9V}A&j4)hvQSN5MOj}>Uu7A+OErDfW#N%9%=Ma~it=>`leY{L zE>jyLRfuFp7^*BA%s|!DlrdilCSeQv8mDpt>I#V&zg$h<28r&j2`PN6CRAA_ zs0-!S8-PJz(p?M}Ycfz&X$UyhmZjj2NZ0gjEZbevS5-Dv)3>%v6nhi=EA{PdU7hVM zErCvi8k?Iy_YL6+p$X~2zse2$RT|QN%UTkHm{;JuYFt}cVF~76+0Yz^y|9Xu1JPL3 zf01(kA0t_XA=wPNRG*SA>;JE&%fKn=a%ac^-M=_t-l^SM|7)1lA>4EiAr8;G)sjmDH~itxws%F z>y4PKGrG91QU#$PB}M~_u}Q5(xv*S@#{ZLI0s&M7t@_v~T^GZ~ms7`UDJPZdsazoE z(7UDd=wDY%pR$hNx>9=lztXchL$P*tv_O@ju~RZhLE`@;RbGCQ3ay)kD(mg&kx9yG zT*p}-DV~d}BPBA@vvxy82~qxkt4thcw=?E&QgwuNj!f)gWr_ql1zA*}F*^+0#;7|T zHD>TbZsJFZN~tl;zFU9B1ZE^!K{n#ro3O-bIg8tv3qQE#$0BgzVXg7j_8mbiHZJe2 zZE0!W-dk5&e|b}9dv{wyZ(v)Xtt(hCT8%$E#RZ}ou&Gld!VPqaBy1j@A|%+SM zjS}HZ&z(+Q=rS~Wy*F~*oo0jX+#5j{kra!DAwIE z_`cF9F222<3v7hw9t9DYqRG%`3-$zNS0HNUU39-5T4bv27YF(47`M zmP5K;9`oP4752(o)=l5s~%7VQcv7 zNu{GA79EC_8>ahYMR+%sYq}n@%XV|TAsK?pg*67&>3QWsX(6>=UA5INEWLp{2Pg6c#oY+s9q&AQf#=~ConQHs&QAHa@Tv5daF z?29naZ$fFX;+fLTHA{BcurjTX?co%BX|8biSx`j`bSX{n?v~n2rFo2e((T7B3J2sF zj5S31GJ~zK=dkYspQ;>DsO_vH?bmc;TPU?AoQTKA)-*&?JF)CsgHBhit}3r6U%Mui z>|dh{TSIL+7-M3uLV5>d<^8OJT;MJo1|XKL$O0=-@B?Y%A3F-~{e zssVbEr-Ss2&0q|0 zxbvHbLCUIzm8(#wE;5L%A^f@W9!tO>(A44{DFR7InT5;@VK=B5i$Se6;^2`tY<6ZM zfT`!-{MIL8aN{Dv-?am~Y;fHGLb{h{Fe}eT(nAI{T-vhXk8DuN9jYA%V}ZDV2C#!Q z7{eZ}TOPe3Ak7V3cyU=5VxpqmSP*kBl9D#*;0uz#_1qP4==+bT7uzBYRHXra;q)bkw{gsNGBXFb#gkvMBFZMfRY@Y z3HbIR?3IQH3-(9hjVA?zL)Zpkqhg4l&-IB!GF-(xhy>!hOvo@#W3Kg7D8TV3MiN2dcaC`FL?MQfG%?&< z21Y>9)JHv}=K*Oe^kdhI=Tel{H8^SrEd>3HQWU}T3~93|TEGZ_o1ah&`Cgb!gBd8m zUThH95}3<@u2&0M;6O4o2rDOT!J4r^6cSDknqs$T7g1fN&OT%hc zq<@`%S8qS(hfNC??n>ZXp&o8s_)a-nIT-7O3dKQ4IQlpH5fdFqfkW#!+>xLv7e_Xc ztmKR7Vg1^iT)FHW1tU8Ng#2Xc}g4}%vH#au8NxevviDyRtr_Kxsm>= zl_VI|aF=OH#VR4eDQIxY_GeVY3d|;3D^ArfFVT>X`W|)%OO$z0P-fq z`4KSxg1#)?*;H3_7On_Mr<{^g7Oh=bS&luFGQS_Vu#e*RSC+5exB+N9wKmOG0Cle2 zSSfW^SFSBCP&ZovKg{FGYFiT}N5%+Nn5Bsmzc z!>>Ew0@rdfQow8@`YeF*<+}kd6$UM^s+>c=1aY_Q=5AB;DZdy0g_}XE_1ZjQ9xKHR zqIfXd23%K~t*R)SZ9qdpPdrc~;RHO4Bq~>J0BZAJwAl!OHULy9PXco|kzOfeQs#oX zte2^S-c;qJC$-O;s%#@?3^n99H~l7&P-?8)U$aWvfl=)pV^pFmQB@gar((viDmt#= zU60v?CG9Y^>byi5h&HZgyxQ)c!m z3jMHUUZx7S4+Xc+%jEX7U-JJ60-5%^#?^nK{Y7P7rbTSO&HGBwm*#&N)Ivw%eubnd z&i^M!W6#p!LAuEy2XPE?Mzcfnl-Z;{9i z?DyXKj_%&ZKrMZkL1#q<)i`xAoKS|z+heQic5LK25o3=@%FtLC1K9;#76ba)kw1ft&rc z>xMtU+8KFw;4YMS2zh*06tPR{qP$op**hNMB;(?fXC7F0M{`f0rBUv3^zPWUqk9I> z`g2M%H^bx7Qz>^iO3-METJCmt(z_P`t|E) zfa{t%X9L5JMJ%(Tshu^U7MNyD0Q?jsP)Fr#l>=T2c;$@7vW{6xu#QG!B9&tuwlOf{Z ziUN$Plw-^Y)*FO}j<_0Sk3x4NFn1S?ZEJPBg8U&AtTCs z$4)YIGv#9Ms)~88i+R zPicjMJ0oN6p;<4(oiHXm{MTzXq0CjISww^TgE+Q_NyJ;e#1G~KhDXw4Mfa+#z^Fd& z9>FaFPLx5MV2^}rtZ)=w6sJQ;Hq;-^(DCahd1Vl|I8TX9>(*`8uJ(@B z_FxxixeX=;Zywq^j(UjF?A>~fGa{=?JL9~>j7$s0KM)HI%1)QHYf92bl8FJ%&hV0y z1@?C38XVlAx*dgMljh11efV%7KAQ zXRoo$58n>1dC0vsFuL z=QF*IMf;NQ$G8^*O&@p+5+odTh6-C0vL(k$iKdd2ckj1L{S31Ci-NqDS(#~DlAQB#@>g_2=0>qGsxgv1-q zpt%_URgh%Yn)ZEz!YkjSBCl_T%4kqi4&Euk=O7kg!qwRGxk zvZ=?d*Bssm)^`R1Z9&|0#4SAArry@(w&vF6D+9glZM}`{_1(eVmiA!K@ZIpnGO=_F z7qDz?Zra*_dx`Fj39nvp%S0}D*FX^zZ(W`;RW~w=lUGz!_rTQ+C7}CfQAbB!LuPn* z%xDBO*j;j4c)D+J9?2<%)us z2~tlqwNr0^;6kxpbr;Qf-a`NO!p(e9)mN=ZU5y+67+O2=52yIm>BMSAwWO!rUQBk^ zgF25xQ@30l8LAObGmdqoY*@lN>cTbM8Yh|xT$>5Sx)REW8poAert=IzZ88}et8w7B zG+Ce`v@C8>L3czLN!8#WHjY#4rgtcYV=?JSUm}#m}u?{QgSfoL9M;n#1 zg-Ha@IN-J`F8?KY7Xa5*xDwZY+tWBIk45+p6mTsrpk0AS7yQn(&UVqs&M?$w94AGv zmwII)F$^UZ8FdD50iAc3{EfUTYp#dZ;z=h&M))skCfAa)T^Xc$%XofkDEhaE;SnxnWC1&AKhsTVN&+B>FR{ATVkp zYn*TdM-USIwbVl@s1Z!|U362cBYkG?qA9m8bi?M+&E zL)Iu~MB2z0FhF*o+HpSwE^~n^1yilKoLb|+j-vriM!ONRA9q@kkN_#bnj)H=8$k@Y zZSRVv!K;vL`qaQY#bAhH4nn;(P9{DCp@W2ZnyO7eKMNT_UAep@WOrCZ1hlvi!O|Ej z(Apjjs!ZRobOrjq8IN2r7pHVwwq(>XV3PCY8VmP&B#GgQQv`-rGJ-mAwhJuKL0>n9 zMnQ1E1UuR-4;3}#0e23CL?CAp7o$=s8IC6093M#F_+fky#~c!}X9-0@U_(?$2)hfk zse$Pejq3n+l6anESERiUl7rpR8pyFpfL_oF1Zi7P_@Y13@wQ+ADN5l2Hr}m3phyOh ziNgkeEjTp^GmLVgVK|)d;6&Km%`_>UT%Y-E5^Xv#UEa%iM+OF!^-$rI9H(UHUHh^D zw$?FJ%l%ym{}Ap*i=`?j4F|B;3}Y`to{E90M^PBEP*Kd!oyQmzaSQ{>e+j0GEig~< zQ=Ui;UP@CAdFzLgNR7g4xIGl3Zu4K#KdPZEgTuSa`-d(q_wyy7UD0G3x>}mdyZN+~ zR)jH4;DMhc)+Dr8oh{4Sg38@x7TyU%E#kbhw=F24&C8&8WLPb0UZ%`k*1X5*O=0}^ z!{pKIy;0sB>Et@~o#+V;1oWpjFWbE=x@-*pjpDzdWzjv@V#C8N*u>UlL<-{2>S;?g zH6W)SUi^(fQm}SI7V+uUIL)dd*)V}@9vIkD?WmtIB@JvYTn&sWE_cNe#=udr<|HL; zu5q>$Fltwun}KnF+M4Z0)%CV5ri4(1T`Ot@BRq}67VVi8XC_XX3&nS7%Vg|WHq;am zv&Pv~RiTrC)JJ}7M$<4c6y@{qhz%FwDQlG{u%tcIh0uo+MwIKu^xAL&BaCMWG1}5> z9BQtt(waHA<$eb#;li&eFgJ=nPz%hqCwUS$-+>FYJm`UeCle_b8KUkQvFJ>pCa@Kw zCQX&dS1F(%Lo^r)69a9G+Rn&G1TUgE7;W`jr3{C5Mr0CoD?qt0dAbYJb&b&)dV~== zob!AXTfC-=Bi{G_;7ly2F=AI8>DZI zaSc$ldW0`pS#`}WyaIuX1*5ersKTPtI1Yk5(U!hv&0!jKeL12L^br zxHdV6=R>egvH8qt?0THdh2G-qJ~JiFiO+)T@t##8&Fv<6*u{d|66t1wh#W303l_yH zC-7Vl*E7Ws(*~?zVVAK9^-Wm1!efhVVY7m1!4!^zc4on4fG}{vnf|n{Zkh}b58Ckj z3NqJQkUq1}l>pZX$DroY0Do#@)k33S;)I5b#UP<6s57qQTmuZS8X&8+&n(EbahT)s zt8X0G6HkRhytoArO+|5`S~IXVbh8+Q6+t?*gA0RnsK>EZLvviE5+|=fDNG2NRHVgN z6hsqEwI+7a(C0)X$_=uiwNSs(Mxcg3y7f( zuQYagX&d(IQy6gnX9|bl>Bce%*12eOIw$B}bG)^sxvsMo2f*>SMxV4;)1vOrH8P*c ze!?2{y_64dk|f0B!FB&Nutu9&%EM#$1rE*V4+QEFo+w(lKM(aFGe8hTBd$qiu$tu(RrMGGFIw; zp=&fh_WXIw4adpwQH)6QKwBijeUTK7QG_!wXeEMOEdd1wS9^{4IqG$f#$B4II|xHq z1;r#oJE#}M8HnM;zdhC;NpBfl9f(Zg0BH#R8U*NhJ>nt zilc#NYorBU0hB{8RH;4~#eBSX>tlpazKiD#qE#Y63^*1U%* zHR*&l7U!s?tfv?4BOwes`X?-6o7fhV^SVeWpjZE}>;d4#mipdCJPNAb_}*YgEp8JE z;S&7`xi|=i146|fW^^5kBJ>435u>6o%W&mcP z2@d5u6QdTD@J|E-1d&F_WQopzLK1Y083EVisLWQRP<>Y?PU*Ms=4qg{8*eG$NhNGC z;0zOCc&D@A-ITRazaE1(mpU zS4eS+6fVJtH9|(oRa>!^XkD;xsE?B3^ius5XZ`Qksdp7Pd?=$OaoR?%4x#jxI6`*==fsIsMLPD8j3o6;?s> z6d=-TIo^(SkU0C)T*K%y)+_o~l(IdP9O;<}+Tmb_4?g-XK5qp98^w?^K4&Z<=~RGE z1}+SF=_-x79mR74u&Ld$=rpl0a-P*%q9JBHX&`;QAbn6vG-K*qbQ0*4?~C4tEzytkh#JfE=(`O)YC_h3MXD)??l@f4MZ6`lOSUXTytxqQc0SrOSf!z`%-L~lV(ivQ)B}QNMdYyna^s%4ry1sgF8+wlY>U`A*Xzwm zbLYrYr5Y9}vmKjjsXEvwAQ9d|rN2N8ALIU#sT28VpbaK@pjgZcO!zTC)YRad1dk9r z4Yq32F)?XUbRfxg6JMU7k%v1}*jrKA1AYyp*t+(31Vf2S*i?ZLSfLjNGR#>we%QNZ1>@TeztW^QZ6xg`%{MjI zNkvp&i$f$M>6FZ#(nQ@mG~iZxO{lGO8<%c#+RkQ|%u{8;Y<)s5>E=RDycu=-030f6 z3B-XLxAou*+@Vp|aDW8>%)_qdkTbf`Cu}j_Ds{)TZY;Y|YA_CX^v5mEGUCkCtxxev z)s0zxLoPXqi+OHnl!Cs3=SoI^E~P*!s|)N#bYa4P+0X(XE85_hNH}u z_)qOL!rXE-y$FhoI!^~h$r$&AEmM-}0qZ)?0%Q&=j3Y1D%v+-(P{7A742l=p<^r&w zGA$5GM$URPTpDm-fUe4d9W;P#F0sK1$0?vRt7K}ERb|l*7N$QON!A7!w76GJ_nG45 zY{KCMUYJayAe9}}N-a6PqKhcmwtD$(vbAQ8#su^Va$^@l>m?QSb#T5b-HJsBuG+i% z4_m5DHnj(2pFf?Dk?raHE2+=gRjdyNncXERNQ#Q<3F#LgyY9 zXNdcZ-W@^4e_BRHV?p*1KpJugwwwZlOq#An) zHY~IXH3CL81_2&I<#`Rv4iWCP7xuQ){CW$`B4pb=R=UAbw5j6JDOG4;j2GHAzu*fRw;)>TY`a9V|~f>e_2N8;}F^)bCs9!BM|TF!%7WHjq7k z)yFJITLJHGbmBZ%p&Snurc(YMKX&y-^mvpkkb^jiSTApT&>bQPetr)IXP{86(?eHy zKZRl|CYh9pZ*TR+WFL|Mq{3aG8?No~qS(NI)1!({_S+*#5(|qf7b;&7!d#AAc$1)6 zr&h%1KiV$Jj1gGTW`&KI`kZu5V846nDZu>B0~Mew{ajRe zSjEA->oNV59UMtBTWCExqhG;KFoc~RocNL_p-d@6G4VMbU9NZxyrDnlxD0viEpgi+giIs4h7?VbZU0H+o ztq<(b!O_E*X%dhk5|m>^P7m$$=zz;dlt_)?eR9J{r^f;;zwqS;JPEJQ#t1c=X&c2! zG^d9&RLVB8O&no-!Ufz-j*&x*CU#~<6se6_)F5AHD2j`1PLEi&UgDS&+=1O#h{^Y2 zdT8@m>7&7Aq=d@L9aPQOZqn^)w4?(cW-^(~x)rbtHZw6%Iz7@xv`hLV5tm%jC|ecu zfoFf;>48N8&Z-LucNW1`HM4AfWxAeZ=m}zRZJGdK6=CB38g`W(r14lyL{~BrZEl~D z!z+#`P%2RX>FOE=50I%ABM|f{2oM0;y28py>f7FG@?b;D0E$G5<(NgLH|C%-RWy-} z=&&h_r>;av&0~0+sE06NB;`Ze%g1iyQo0=31QaGrk@o414;G2D#$66+)QU7-&nOkr z?l@2KstD3c=ay7L7@p8Z3`1{O-WdUGp!U_U(}T9xhQqFeA*y;>I;4^bn9+{KK)70p z3UFV_Cq=KQo7kvS} zA?l(SkVy|zv&mEqrQ*OeRS33|hHlMJ;Ha#*-e_LjZ}!AE#G6|&cX0w`fOt6HSS+?q zAtr?^I5Z5U3c^UR0jH5nurU6SMHy-Ifg86o1puWS>X${m6wtCxj|XJ>QUs$mw9^(Q zS1hbU%_)6;$>}kG(ptRWZD!lID6eWCbhEQl%DS04J0Uchs#8p7C(Mk2=pdS4wy+S% z7;iR;7o~P`E6xQnCRJ!2+E5Y&o3sXn!y#bHahmle*(SIph=UcljU+%1=y{>gr}Bv} zsjh&u2n-Z(W8j>nt%UiCA;?mnO!s>;c;jdlquL9$iUO+`yjszaxF`YEkaVIHsGSdT zRw(6ZX_Ct_PeL$*Yf>1pkX{_@!Z{q=L>F%rtd{Bx*zw>g7xW4?Ekk@J0VFC)vhWfx z{X`vnJj|23w1ovc#WGcZdk@=qF~P62lND>aYhq$Zqp{8Py5s7s$)u8NdMYbBH}LEP z|3jpFgL{NxwhT}sg&eaW(7{(;=^~jWj~PvcOta)kVopw$R~a<3WJsl6w*2ma>J7Vw z3t8m8+Rp!;^U*kY1=G`?{I49728I35*gV*XO+Y{2SS<4!U~p`hA9joN0GwLIv(RmU zF1`H2x8&qS+cX%k2KND0$7n0-E3ZME3dSkCH4gq?Sf9Zjg1+!$(w6OEe?N>r6y_St zUHc8EN ztb`EXWR#Bi-4C+K=I8+3u>}x|NH%;S6ok_CBR=1gz!jQ|UZ!<#U}C=+Ph8-5`T#c7 z5@@D;4s_P@>MM)StFIEjo%B!WfeM3s|F3g zNA6a5zDZ%pVaV%jZ|&{qZ0~BXZ^vgW5y3620Je>{E5#ldIKvy?S-UYMXHc;bdI0c_dunGJN+rN3f)M$+WZvxKx^o6k%dA( zDJup~KeV)_LULi>bQWoD`?MyuNc3i5FLP~c4)UG82JsQ-VFM}L+=h#bt+l1#&f2yH z??ph#i(>p@krQYD9>~cuo-A`OdHD@%QuaI-j!vSL*gjS_KkpoKH=8~Vo*3c%Uo$8? z2drFy7QYAI~o*k1SLkXBljdf;r zW6K8<2}lk-`}#s@3Sxw@P|k)C4f@0Onhzi8Ndg_zg_b*Qyle%}a>>P0&+$9ZK+n51 zwV)xpgSen73&vfcSZg3yYuQzj6l`j?DVCm=SoY;$m2r8Mc&38JQM|$=0FsqVZh&Aa z!nEEGQyu~-kD zP>#kdC~ChK&DRloX60dVA8=Yn-b+PpdFqolfALnIdZA21ETQ=V=4|=!3SNj$Q1;;Y z+hA?)%b{Qfb_irEWuYJd!(O&L(%mMgvghGA`buoW43tv<-!Ii(DU+pNkoDe3s;YNH zk4VbN5_7(V7Hx*ty15PG4}hBHxTWe3$wj3K4<$riQ6cT71M`iFJ{F6L3((-^V$Y5r*dC648>>F6*32QwJ9kR6K4_tZ_pkL2{lO#J#bXZ}p{>yI>^ z(+j(CEx$;^O@O%1dlnu?yUobXzgw{%=Br=RaGYz+@#o>iu<@hB$YEnf^~p0-z8EuX z*eG*Nd{)QfK598yxoA7Qd`Rn`Mt_`-i9;6*%|D&tlC(>V6nsCOHWt6Nq6v%}Nwkz1 zXcSx^I*oZ8UXYEa!T&A!5ZnuicZJQ@FoVy6@yg8?l4~Q!YZT6~(qks{GFd$BNvl8$ zk2I6xDL5Ju$Tr?`;9JXZ2u1g{&YeGRK3%uMv+sDunaOJ>bm zG#_6f#O05h7tv>UjV0OeoPb&6pJpc-vm^L`JZd*cbjc9O-2Z49l`ST4%e>&U1-D_)5RbQ9&!X+R zdBwD73O!zGIh!lxMfBS~UN!W)%kvlD0?E`odZf@ip={w#cN68!`JII=Gi~}&+Zx9g zQ!PK#FS?ESYLng8#Q+O;gzDzwb&v+}6aq7uGqia2|U!ptAG~=c}y5@r~Fz_pF zuodAPg)YXS`{6vdc?o~0xQM=#9DQRAzYqyuhmEes`08tmwan&_#sX{yyl#Wx*M~XS zfnel~iQoL-R5V-KbbRM^VNq{-q#AoC`n(XXYTPoN*ZD_&*puZ?r~Op{UQ9B5S~Pv^ zy&u-9n&U)QO66&JJ>+z0dHk7&18Tlbkimx$OpQ9nPl0q>fLUg(hfx#8m3mreE}0Vj zNyMlXRL39sxA4RmfjcJgb1NDfj$GBhv)-0|)A6et4onu9AJOS)`HpJ7a%9-73}Xk1 z3-?peO}O=~W~2Hta(_L2nJ0^W)sEpfhTvmPYhkPbOL@@5m(r~RbaZLsrd0X>wq|}x zSByud@v@R(rVr-K@1><_#u|;+beNZFXgi|D#~Fl~kjjVrnlw#oZfQzvTr<;f&WzV} z@O^AZJ2LvcZS%sg@ir$KHR$QtnC~q|UwRnxx#hkhk3Lk4!*_EF#ep>+P8%=b!cAZN zq2w93@7$c{`^oX-ps{3u@nHEh5siwcH|Zk@CZ!x`b7vLt6}uKjx(pb*)@k$wF&x67 zLU{u>SAd(ZqMu);cR^6ErrT|zCRpG_hvGa~fa3BQUVVTwNd8?LuQ+J7@h*v0f}>(Q zQ96xo8e(@kA>h+YD?8D`plT?aW;7gp7kDZKfBw#D7%ay)fVVkEzfK&jBd%f3 zoJF*y3-fxG@uI@mnz!1KMtV9qi0;A6M!<1A9Yauy(2kb|jeqyS9#}IRE-bPtSet>L z9dK?*PN(;oH6!X~Iu&X3q4DU7{>wh}Aer$2bTf;mSs(JzoJ%9wzsH|$TotBMV!E@N z51INJ<6g__Rt3hVz3GWP+OkhqzGyuT9UdLj_%r0AuEjwP)up(8?2r}*K`}9g4mS>T zu+tc7%o)8CC%Al>l7?`+TZ_W<8SF8Jir97;b!|4k>S_UQTER~0 z73Iff(<;xXYmIv`vyDwIni0OVXWV&niM6f&$F%*dv{&)|6#a%DT{d3Lg$se$b+r6m zJ8oLTg;^?bbN^aI11jEaI+ONzW*h!qI;&pL#mtwH#twziUj({{QPr(Ue#6&QI_>6sCnHuF%*FYFc3 zV;O64O3}r}KVQY8H!hCF$4jpogRhp3y$Ww<%r-6{GJqoyA&M0Oc9pOhKa}+v1i+MBI0=!9b0fu7!JsHpC z;ea!PqvCm_==yMx9mgJ6VT+ZS%jxbd+%S6D^_nl05Ygjp^RVKYvE*Sg+O(RdcoFYa zy{bA@U z=5k6)K5RpNC~b>$SQn*@P1jr?o(X5Pjm9X zx?k9%XRnKT_vw4F^@-fHD+dl5oUUgK89MB$;Uh+l%Dj5?m}{=hx-NU{xa-H?FkxcO zjguzdG$q&glJ3lcS%tIb%$+yib2DCkw&<2y7vHvI>9Xaw-{CF3v*fP3@45HB`&X=d zVAWq9^sRpA;nKf8^0zgQu6?X*-Q$1vmp}1j#Zyl|v;Nr)&sA>x$Mb;~UVN$Q35`Ec$~*1=WV9oMrTlgT=1ITZ zh?!Vi8Yje~fM|th$N*uBYRr?JmdB=VjU@3v8vwUsh;~2%kO(*d6-WZk1kM7^0nP$P|(lL6XGeC5U+GW`BBgvJ%soiA6vh%AMRbb zT!`1M6yn7UoD+@|;`VEWxcLUW+a_0t_h;exK%9KZJ5ZQEn6R<8m{1&n>+oi=q zkW-f%p_dK8ctT^!P@#7kKKIi>ZvcahWdga1oxCl0$5Gi=eEZgc^qq5WT-{~Cp7hjp z*-s4ry!>~^ojiof2c`nkfa$;tfL@4rVoQZvv(O zxd7^1N1f|a0feVI*HPy>>Rd;i>!@=bb*`h%b=0|zI@eL>I_g|Uo$IJ`9d)jw&UMte zjyl&-=Q`?KN1f}aa~*ZAF9ntX%YoYgltuRf#Q?3>obCp{=M5tcfb#n15W@?0u{i2XB`2ge*t(AcnPQiUItzPUIjJ*uK}BZ*MTiSHSh+o6$k>` zfEwUUU^`F?yal`syaT)o>;T>ab^>+4`@jc42>1}#1$+eT2I_&2fqw#ffKPzEz^A}x zz&^k%V;J*a01dza;2`iN&zZGg5wJ0Jl_1e`#7 zKn0S3Gk`OJ4!~K!*#O3PJsCI`=m`8zmf_FXf7ZaCHSpiBf#g2J#{JTzjULrOL;t)r zs?&FMx%7@@pS04WI=Z|m-B{j)A(SU?>q#9h?f!K6K!ZkP)E-q?L!DmOc3MGrp@y-*0>Gk!i!Ay_> z`&)}cZPvb-{`}&USOLLUtM`sC=r#&VXrZBv7} z+#6%ZY~&7z+!1H}D}C7KlaIIi$GE6pXlpdT>A&51(R3`|YWV3xzrE(F%pSMzNT2@c zyANmHQ

    (fQfjg&(Gm>Hgq#*I!?sE}xtK=__+TO}AZ2(*asDC+Oq)Dv8fsdLsRw|mmPkFv@d{X+u)o+|VXWNYQ!JP5hXnbQWB!B7hb2_#E zvQN&?f9Z0rzNGMc%y-paKbZpFQ%@V-8@7w}NhA8feu-W-yFZp)rhoe266QJjg5Op8dv6Vg?+E?t2_xY@N-z2O z2{G)NdE(ceXNeDQxKQlt|C7l7G$;l>`d5+R8!Dz=_nUZq|8wHiyjqbqubbF4W{4Q& z2#Yp{`-)BveJH-}{F~_cLML%(@H674%kC7zUhgZ)n(h)+-8~}X_9^1y)v01^NvbIO zF;%Rba+m1wbG0~r{*_|C{F`XM#x9aB{#LZjSt;h8KUaKk`{km|dl%vxV6TeDXQYch zho^|m7cLTCe*Lx>wDddiuhiD!q3jjnm)VEK`7cZn@sn2xw{5&w`s;8Jd2Y7QwtOHi z|8cE2@N8#sQ{HM3e_o@w`_bvb-(iYag(Erd9w{y?8Y3KzeqzV?v&6gWi^S4~TrvBB zAX-AlcKCC8zp42h^QuCF(EV5!d2D@GocrXJCGWgD*FEJR+Kb4Knog{*-u^;W_2Wmo4BnVs=DqgzhX(u3dhc9++=;=rUbhYXVSM^%?hj8z z`@^oN{wk`CXe3(!Hb4O!z-cD57%0k{o2>_>@zF(nd4RZW5&=|jp2UfoqS#n=%Pn55Yj%TOl?|6FB-mVAIHu}=PPQ0bt)k~jEziv>-KO^yl z^m*Fo+PbS=O_wF&p>CsU(i1r!_30PSDeOJ0>WQsuPwvm|vwvgy+_ejz|32_i`psuw z@Y`EAZ%N<&^%{&{??%h%GuKPS_ZoFz$UZ|mecf<*$8;~u^mj-af5pQ1lfw9`lg8f+ zoW0RsX7o=SH~zw{jlW&e_?swvpM>EcWZ8+FJ>Q0|LvkfmH(`7+?sXK zgu@@T{djBH9sTsLru>>-?DbMx)8u8@QZ(C)^Uu}Maz^xMvgYN{^Wi(9c2hMkHw~t? zu1Ed;g(ymk3q6cD9PAR#kN$!fpJd>-k18PEQOGM@d5WIX#XmGSIfB2`Kz zR!UVPT`E+^E1J~EU+F0|@>lvvjr^5Vsj+{C>}tm^o_?|L@{Nww{4Dydpl^N`xAu~Zme5TCQNN3ATopg@O zWdD4b$^L~hll_ZiCi^dyne1O8vyoiHuawyu=~9`klP;6l>|Y_X*}qa|vwxM$X8&rL z&HlAA2gyZzoy^fl*UKE8^nRJc{*5w+{g28V_CF?b*k8&V@=p*lA4(*|%Y2QrD)V*H z$ugh(6EvAm{s}#0KKUo~llkPIkSg=pKSLIRiiAvAsFBW=g*xdRS;+qRvXK1?Wg+_) z$wKyDDht`aL>3{rNLVS0G}5KANGDw;i`c(H7O{V&EMosES;YR;vWWd_ClS|oO%BAG53XJ8X<7J6PT9qX_>10_#{;DQR$Y1R# zOUPgCCrij*O_e3=pCMO*3N=%%)JSK`l{)Dhxsv_!;zEMtEu%gDcjkQGp(L%gieNUO3!C!H)S$iIUoE6Be?Pgz0!9s0=%^6!u; zE7(6nR)UHSnX*zNoh>VM(mAq{{qtod`xnYe_Aio^?7vi2vVV!hMIEGHDXTQnrLsyV zT_&s8zd}~Af2FKq|0-F<{?)RI{cB}4l8X*?vRWfuFROLZ`(-uzH_B@EKPs!)|Cp?1 ze<`cUKUqjz5Q2`EwHj$v*6O5_Wi9z9YqFO7lY7cq@=xw3Yso)3Ro1e9hQtLU@Jv~! zk)5|U;(`*=uaxx~=~7v*lP;6>>|Y`4*}qcO zvwxMWXa8zh&;GS?Kaz{&I=NpXT`%|Rr1#7H?B6K&v;R@KpZ$-?{p>I0e)8`mBrZll z$IC{Iv??2Q(#f)s{5xr~k^DRLl#S%ysh?~l|4ym0k^M8|QBct-Qy$ewXUn5H=^S~K z{qyBf_Aiu2*}q60W&fq}DEpVlV@NJKt(3(HA6G7neN~Mx_Brs+Kvpr>8v6h(-WbdEcwuTbSF{=S% z4lTzq2ah3|YK#TCYHZVa*cNGVv1)8%<*Ko*)TloC~(MILTMqSq=8+F!zV;qGNXfmF(rb(5wuE}K5dD!=pF4kmE(&d`$N4iFnsiYgQ zZzPRlqfF9TPnk_x?s-*P{nM^t_Lu#apag0N{JVW*)U6UbGNjGH34AMCE%OtI3 z%52hlrpzIomnri}7h~T@x;#@Bk*>*6(0*O1dFmW{?&*wjr$*%52hlq0Awj zS19vI7h~T~y1Y;pk*+C}OG!5r$`aB7`$W=Okt`*x7s)cxc}22AVuDkuENgJxQ12Se0~5iA*KkP$Dx(4ufEgfx!%SCZDS?6%hmO}e2} z){@4#LLF%h`wY^0ncPo0uS_AVW5kuI)~JxQ12Se$fCg-j*gP$4r&i%OYETEj6aX}wbBkj|@=`J{_0Wg+Qu9K(^W zsgz4eH&n_J(xOVPB(34thO}NK%Sh){$qLfNRkD(FIrjaeYpP^5>4qvd}OYHwK)yjC%TCG$`>o}((omVS0(#5s1 zC+YH9*^hJ$&N)ao)XEIfIQPmVt<}kF(mIaCN$1tceA2~rvXFFnoh%|4th)OB&~Tb)>cZvYxb#eLv~E z{j!mC@qT%fboqXHjC2k5jiej)OTH68G|Ko+;98?pN$WUgB%RkNHPXe6vM1^CM%j;a z4bG`ZH#Eu&(&DJhB&{8l*`#%xYmm-6D)UJfAC-lq%a6(;(lt01C*5#VmXH?5r?c$7C&OA!QwDP0D)GI*x5f=SkT}x>(Ai zq|2o|M!E+3e$owey$>^Ys7E(|?Cf9g`>B(3Yg#;@LoJpbgLtXbW@(&I9P4nR9_@fE}RCrXxUCS!pXIy53OYhNvD3?FEW~ zJAiQj#iwaJFc+8y%mnCXkcj~ORDB~b378Dr1WW;F$_4U(`+<9byMe&~HHr=l1Tugj zz-nL^-~)yOvw;x+O+$g{z*R&rjRZyknZVV+XkZX92DlQq21o<4fNO#40QyOO2A}{! zGuBUa+6ss>Ox(s)UsP9AXH;Kb0AZj3p!&t+Wf>JSX3R*(LnR};!b{B~5~b0m=Rs4u z;3^ciQyXY%yDy=secphkJZ^=iJO`nvKDI$qS!$rEuHJ-Bhu#jYL)Su6oxKH3_4YP2 z)z3T7RDbV6Q$6KDQ$2Qorg}URn(A#TG}T=eG}Yhr&{T)?`w`XS4bW7N{WAD{K7J%n?c#Ix{c^aFq0ceb; z@tnrog8+^F!+~)?BS6yu;45G{Kw}w=V}-zMfX1%aX=W@rW&ZwCcr2X(atBZhcmW#A zXxySPi>4)p!p)qfVoU}=<}PW6QG&;Ip4*S}6z=cdi_ z-L5gan(gNDwYZy~o<}nLk41H3G#!q!crrK@wH06k6oB>_=0w?ZfW!l|52Ae*?SE*0 zLd!HbO@K4)GtBt`nD@dKMqnD#&3W1$%=w`)^W+;sdLPo$_Gr#?n^IvVmTph9<+z&^C7S2IT{br;%Ez@t)E5< z8f9qwNQxU4HvNyKJ?8zKQ-4Ob*gTiQbNwLCkGrhd zN}e>ejXT|lW-KGAu?LNO#xy5xQu91n+QpfpK{UZBstc#?-0U+qZZgjgh#L>xBks!R zk~8AE#?5F>ML})=>lrsNYCALTg1DJ+nP6ArL66v#^lfG|#^4AM@~XJeahEsSamEy# zFNiC|T+8wB;^uTTKH=yRa(LXBxGS3N#+xi?*{rzPQEMxAyt|D%&i#w~dw03}N%vFk zXWY-a54gW{f8~DD{j2*4cZK_D_j>mR_jB%z?&sYvxL^`=bdjts{T$56*G$5oEujuDQLj!}+G$JLI} zjxmmF9M?Ls9M?Ir9b+Bi9M?P6I4T^^I-YlIcD&)(>DcAihByx?k0@)EGUW;7A4))Z zQF%q#q-@6azej0M4k<^Khn2r6k16YvCza=w7nGNjSC!Y4*RlK)<$%(pe2ckkWvp_Y zGETW(8L!-+Oi(5&Im(U7BxSX7lQKm)yGtv@ro<_VVpkkWYb9Q3qqJ4pDG7>CaVqVV zYZSNAPZ_TCS1wbADVHi&DFc*LB~7_f8K?|W1}o{xwTiA}C_|K?%H_%>%4p?k}9q7(>iE>wCc_t@^U-EUiA+ko-z0oz|}&p|&3;B4J?mWK0o+eX_zY|qKVTWr;~H*8yNLEARl zo3*ZKM3ot|eW2cJ0;m!md3|Nnxb>J^4`c7Vhh^y30dd9`0hL?AmQc z_oq|ZbW7-#*sX0hvbXKlu3K`7nv#&xA!T3+pPX{?PAT0|`ls|xX_aDmV|S{x(iF|E zwbtUbHdvDaU@m+4{GNH@FE;(K7yyi2sRIQtq7EOoqyDpQu zOzv_MFYDSxgWi_%YRY>l8&i_CbG1%dXUzrMCEBI%=zJlLAG+40T%diBQkl}2@?6S4 zQeIBkijB9cwjre|<&Bh%-OuYjwfl_j)4O9-zfjY+K)g|7qW2|HQu6{;B;l`#$@A`{(ws{R?}8{eb0vz624RGfCF!`a#y?`-32>ul#ta3(sP&h}2#ndCgfd8V_2 z^DO7t&U2i}&U2j|o##0_IXgRD&hwp`vx~E<^8#l#XNt4C^Fn72XHRD@=S9xm&OXk* z&WoLHXFum9&P$#BotHT;cV6Kf;7oO<(cu%O!OnE2?#yrwaSnA3b6({f?i}G9=^W+E zbYATo?Ht3YvYgjBvz=p|>yw_vTAt&z{3Gf4Q`Yfn(k857 zbJFWcTav1i-bmV-6inKdR6`dYFzKu(COr=QHSlxPF2u81E0>K;;ua|^PjfEg!e_+&_MW(|^SXEr&nop5lkL65nc50_cWsjWM*B_ne)c^3 zCH8##rS_@z{`P71%k0zbm)mF9udvUw53m>5Q|+_tY4$?^Iwo*caG`+KcSN>62 z+P=&_#=hKsjs14}we~ygS$41eI(xA_+kU5gti8lO&VHBudi&k>@%DS{=W5tgMM(Wn z-KBn{?pEv7kJW#wd(=hvAItF&T}tDR=Pfn zdpXi4?$yYq$SZMQv2_>ZqE<0s#DmR#vDV97yCNS&Vl6G_uW&U)4*bD#EA_+{YcuRN zo8MLLdcyUjtHSk^>uJ|BuJx{GT^n4_xhh>7UH@=B?+UnHaJ}ey$yMcg+4YL+Ro5oh zYp%_%*Iip&)vh;OTU|ldHdl@7P1kl;t?Mn<+pc$9@49xl-gE7A)w$kxec%eYK6LGJ zedOBhs&{?t`loA;>l4>r*Qc(}T>D)6U7x$ct}k2-t^=-vt}k7UuCH8&TurXSuCHC+ zxQ@7vy1sQqT;I8HN^kqo^^@zE>tC+puAg20xbnE?;{tJQY!}%4TDkUw_M}#!J*7RZ zJ)^DHp4B#J&uNt!m5{2GicP!CM1Y1Ly7t%s=mc~G&I6*;h%8+7pN?Oq@C^@O9lmi<`{U^$Sb z&T<&bkt|2E%wjo?9R>aaaT@2FHZp&KIPD3V)-hj4oc0e*tC-(Poc0<`%bC*!wF26gG|gq+9{afh z+G8|LX5Nc9?K_&rFn!&?h(-G#~iPL_rX&>_?zLC8xB}W6HdQnK7W>=++DA5RWc~?p+H*Fo zW4?tr?N6IlG55hWTpZw2d?kVtyxa+H#uuFsCQy3TS(3>dZWsIBjK3iOk0m&mw;ES1SJq;-iTl zVLpKPNaFjLcPBoKcpdX|i0j0wnYST6koZRC-{H6Af&s+WF+V`OKk-$}-y`lOzMT0> z#CsE;%e<6$58{)VFCyNJ_!#DGaLvDf_C`&En4e3W_DfBDn0F^md#I+)%r7NQ`>Liy z<~niOYc-wxh01>oaoT@19btYWaoUqL?PFd*oc3u=bhM&>@^ zw8v{&$9x@e+V?fBV!n|$?FE~bGp8q13uu4XG?)2K;>hB4}J2O9vxJo>c`31x~5I=c>${(QqTS4`Eg!$vdX^d>z$NYZcG;%i8 zG4DtI$>d+nJcD>A;v1P?OI#zqj`ejyc6+t%tsPW=JscPCGig2 z{>(cPSBcMM{u}OdDo7wcnR%FaJn=EiUn8y%AH=+ZxFFt#`JKdnrTlefK9%@!;)%?M z6aSI;$$wG#dk~KhKf*kb_&3D&G5>`6vrfE@`B%h;5wB+c3-OV}H!^qPUYdf@#Md$J zNIZ-9D(06FA4hyS^DN>Mh|gs{h4>`mlbO#Wo=bcT^X0^+5g){S74ZV%eVCUKpF_Me z^9{s3#1om<5?@ICBwq31D`+IXnD`OqCvj1-U=GfVn)Wg8f}a-(JjCmm>%xk1iV$&+-^m9c4oh>#kXMTh@oi{ekWuDL)`~l*VnfE2`BR+6s zytZjBb9(bc!A|0nnX7HUL&V20*NE>XK8Sf5@jb-*Fu#WQXT&=*pG?PlbiJV|k@>B} z>B>XX$seiw<-`T0Kf?S?;tKJ7%nuWfCtk<=3|xaLNFZL#JcGDOd?WLlh<6~qj`{7x zlZmfl{s{3-#FsOFp14MQF7w^QyAhwv{3qf)h>u}@27at6=uLbO^B%4^LvO7B!2P-D*w~Ob>c^u(;HF>h7sS#{2SsUiPte#Y5N#WyqbAm;#tHu zGQXPmIO6M=&m=y9_$uZrh)*KEocYtlbBWJozLoei;**(wPP~Bl80H$Te-(_QuM?j}{N(pk{(9mC#E&pPLVOPKeau_oT3dmKcpdX3 z;tPpaGw(rsG4YMe2NGXKd>!*y#J$8!2-C?!6Kd3WM#i1%SWlz18O&dhU&`-vwqzm<3e@srM=d5#|pP??!wd^IM2(#Os*fNW2sAYT|VIX(DgCYK)yc^@k+9`vH1G zbROdx?qiC>Jxn;G{(qg+@PqNdX~TTcUW5;{7w$LO3IFhRBKLf|@VwAk zVLQByNDN%WfyK zo&{cPE&N-tygk;7W%|Wf?@Xug4?j#{)I;=#v%FY@|hI}vytd;N#uGY0FsQxO5Y&&$)) zPDD^2-i?5+hzQCY!uz-MNyuj|%7#1!@C#9{1M7{m3;iOL6YI`BiFLe;d~`yb#}yGO zZzt53S_}0F#CIZ%AL~P1dA79@5xh?;jC{ILz7X~#D)JY|cM2csI=2e(6}t#NgM6gh zMJNDWqX^%Vi1!NW6ZIV4j`$D3_Ac^5P7yfUF0v96L@vsZwG(wV7U{8G zu?y`q9qopEM<${yNbecd4j(DN^D)Sa7wLnapze{sKqdM^A@cnx+GHB)|9jLK4scaB zeg#M037o*X(T}{9n1@}vl7PBE`-I>dK)k@~SU2o`)R{XCd#~xJ+m3eOzaQlph5PXm zkbWWJT!gm5(O6bj)G6xBa}&ymvg+8Q`dS09g$5$s6s(Kt4t+Bh+WRK*R?|v^-a?*x zqYmeyZ=(Lf#aPdLrm&l=+}s^FGBhX^cD22;H~I`Sg(pQXdcWXZ=ySXpGKbj5_N|@9`1%;p+}=k z*P<*~zvyZg8uBI{Mcp4k-qGLu?>U7ReZqtG6WCTX^y3KHMu(=~y8V4H8em>SU(dZ6 z{c8f&kG#0CUO!H9vNV+KedIe0eX%Y29hUh}Mtup=!e2$bdDF2@j15_+ivZdzGz)!W zIp+IA--C7GXwi%9+4CIQ2-~6;{UeNi?5;-LKxa7K*-De+Ol>BR?*?2;`w(!#5Xg<(`Z6--|Jf-jR1D%7yy$-G)34 zKshVWKd{aF&>j)={Q&xk2MD5{s_>1V-}s(F9;hxc;%7}kKJP)Fn1MRPHXgnUa0 z{}y%hHI}EKZ=yc@UC>uB-gw8O%xLGpYUE)PfV%af&HR5s9#9YJ9<1|Ov?tQ#Vz~!( ztixYL+xX$9_k!(iNSmcRq~GUc}7`qAr)g2W9iWh;~3(+%$e{Ls_ZbaZ;CiA8gB!x5t2c5gUFX)I+Ei z`A5Ed70?Tgt69#G$Hh@FveyN`h^$$-m@Kj+>Yg!qE9%G9@|V1%e49E zFBrE2HHbADc}KlO(EbthKc5q}+u?(D3n6czrHF?zhLC4B##@cr9eD}Y!v746H`|am zj6ni1G}t5CQ6}`GtXEMVGqLZ%Sg4}hxkw+`fc8UMiA1y;_AlWrt%Zg<4ZMkdf_+JF zHuYolhp|ZKMtN@1%6|8SF;t7-$ zW1A0o3T{I_s13265cVA&lq-Pk*MqS^$9i)&VS7fKc<~U8hJ9)Taordr{a%#u5{wfV z(}T!o)<2Oq^xfPCus-Ss*am|-@`!CHf;{-HK!3;f5T)-?GnNErXjrtHmwKR`8~vUpp0jzxM3X_Y8Saz0i7|A z$%`YwT-b9vBR{ZtT4P`2NWizr5`+f)(WF0^AbhJ5L>9f@aCCz3+>w9}ML}PiAOe3$ z5J8M1!TT^yOhT+#3BsF#`PoQwDbhRuJvKo^&V+9k%5^hh;XR6e%)9RgPlCq#5+gHU z$9o(7c=uxNqlj@G)~6Zy@?4ELu=@+JzM0T#knc1sy9qv62X+EN!#X2aw?LdAzrXSK zOH|oK70JM2pa-xCI0$5Q#Wxx+K;2+|Am#&@uLP1Yp8%}@Zp<$R;(>)o_akg;peFzY zzZzOOC`~m1S zz!tynDnP}%G}VqyJZyk*&V@07?lyTLQDkA>zbX;O5l)ee zbm4=r{UuR&ZcY@D?-E7uvqYgn=i1=6AW>*Y7y1@yRssQ}Nr1hxQv`9w9CTp2-i3ED~Q_x>xJF>M1tsm^+gchYeybFP89xzM4`vQ2WRIh(&eIT z4*r7CXfbf-iqbGT3`i` z0~7*FfE~bIpcm40+yM=w0hvG!PzWpmRsd^(4Zvn#2e21744eSkz6XDx7mx;I0y#h- zumo5EtOYgzn}Hp`ULf-wqyq|pCBO<`EwBOD4D0~*0*8SUK-+h*9-tSH24n&`Kq0UM zSOKgBHUOJ}9l&1TFmM8Bi@a{A!!lq8uopNCoB-OskJvyjAPvX_a)3f$39y3Zan6|o zWCCeGFQ6mP7C3?Bhk?Do4q!8|0ayzhMp;h)ZFeF)&t0CBO<`EpWI7>4COyB0bOxNCPr~9H07e6u~S?MqymG1p};7>jj<(w_WhIiIRvb3?>IlW5{M-yb zFXFJqzG?w+Rm~-T4PwZnXmG)p)O$HTEZl_UccOUG@1{ zYhLj*aeNEfNq$;!uEAHk^T2)hb>bN;_r-fXtg)Xlv{zqGb_8Orc_W7Qc_CLx8J6 z%15#4)1M=ac4NEd^HLmqKie}EdUd=A8rqvXjX3Jr&|cqk=BhS>wJ*q8^JdK?j`A70 zIIF(gHnkWA<%Vwt2mKrwv zKG!^j?yziTx(FUFr*#m_DO6(F%yiyj*u1Bd;~vXqriG}mLss*vYF{T57KtrvK-!0%VwqvJ#5%w%b`7D+01nA zzZ$mKa(LEQHZz_0n_-JBhyO9lW~K`~YS?1S5yV|rlxMP;>2lY>c4~V(VcE=dk#fTp zTMoU#vYF|!o-}N+Q-&?J9KmNTo0%^3jA4r{M|h)UGt+sWgAIi^+*ka2eUbbvzy5Nh3Ew&tD zvt={WxnG6NXT_&-c&ja&nJ&1+u*H@`-)h;+bov{HEw&t?ZI-P$UC^+_mcv(T+01lV zZyL7Pa(H)GHZz_7Z5ppzmLn7p%{DWg8nwliBlMz?j%;Q+-wTEMKFl@2q z(9X4NW<2*fhAp-n;m(%LOsAe_*ka4!?Pl4`bY2a%Vyix>Uj^Po*`hWxU8Kga#kNOo ztz|RQdAA$3*mC5)ZQ0Cp^zmp~M{GI74$Eey^S)!)V#|?RXW5$5y$2h{W0O-ke6vut zsLizdvHv7nY&in6Et{FnQ)t*?%i*7A+01m|IfgB^9Nq<%%}kf&F>JBr&~di~<%Mi! zI{!jC?zA}NGyH*-hSHHukFkOB*h3%LHhn1_<=qo9Y-V{$2XNyzrNn&5Y+eVA&`gm+foIX2uhTVDq+YkKCh{&5Rc~V%f}i!EY^_87~s` zHS3wn`<;=F=FNDy5zA)A%l*N!nep7;8@AZ?2>xW*%y{~bmd%Xk{@JoM$NQIIi)|18 zua?b>=RaZD%y?OGbnaucr5Vrjn~^TIJpy(k9ofuyZkuH@;|1GUHZvZ*G)9g3Q97!# zfYY*>@zfX_rQ`ZhTc#r$eW0D<#kNOol4UdF`J%pNI`YlJi&;!xGk@+g3|nk_c+RqH zW<0HfWkV>=pAWCSpm^kK#`EJv3}kE39(c8dX*1&m@yZL+hU6S0e7B!gXZkdj3xp*Z7<&WlRqV)btESniG3orGEO-Jd2msvKmyrD}CTWouT23R&T zUIeeqpm=6Fil+{;Y-T)9nqiA=50PQn%y@ypmJOk}Jh{Uyn;B0X3L6@jI89XEaGhl{ zw7Gl8BhP%u$lEt@qC|JHZz|86U){dFKpS&c%FTREw(-U2Q8Z!PiwGj zW<1|v%Vx$CU%}>U*&hBQmd%V8`Np!D@ghepn;Fj?wVCxy+8Z&_(YzVY_pN0!<9WWf zY-YTy?+jaPdjx*8Y-T(iPcl(C%ygvHKof0q0vUV*!BoUea&=Kf1ztzrXyQqjA5gBnkaoB+p?MY3ujq2O2_FZST-|%x#J95 zYO#`E28+01x> z)t1eS7g=T4V%x+2h-EY51s}F-W<1a1md%W(KMEVp5sA}8b>?4!Hj3KJc%j=Y8>OTA z@h-D$X1v^`hOI?=+-}*-c=~e7X2uJ9Et?rH>kh*f+aA6W%Vx$47h5(nUgTcOX2#R* zHf*u&p*>*P%y{1WEt?t7`;cWbJ&;C~Sx%bD^0|f|Xw26*S zr=-L0Mq!&#uar(rH`5XO{mIM^-6y8u_g#PVx7~1gd*Ov!_{sJHKc5Kw>GlGbSa^B| z4K)1h_WYh|G7!%JPcRlU?_FO%lr*Fg>UbI?KCF+m*8p)KL#FKU%!IKme1C;WqqsQ zvGrGV%*p#d3Q6Vb*1Ns2T}F9taCA4GX!*FC+GBLG_%!g?cpmWB{1t=8_LskaBMeUz z?~zlMzXl##|25#|NJHtr2ajF<&G{|YC#T~cikSFqXS8gO&fu}}yMrgjr0)+NTOJ)e zHveNzNq-}FYboXgP)?j!)+LkZNfdwCIUmDfxr-GAb=0o*{O50(QSzzsxtg99GG4MZ*i2Rwiqi1Y#nynqe} zAk-6i0kQxU2=xF5vH%qbU5I=Exqt?Qx??$z1*kwU1@QnK5J0dS)(2=n3 zK=3%y0-=8)Ef78i4G6%Gr#am~@JFm42>k#Jguh1`Ao3mJ0xIB-AT1F57R!LhQ7i*g z(np{H|2J3{5c(Qr1O(taj64H@CM*L&hu{wg!2cC&K&TPv0Ri~FM0y}_5X*qj0i*{6 z;Awycd|x0hKoC1SHxT+9X@JOnqyYrr-vP;Man zPb>oj;QJW)00Q;!146s83=n|tBP;^~yWkH5KLiK7A*>7Ve*ilWd>762l5O=-h~|yq~8I58+idDZ-E2hTBHLa+ra@9@VyCM0}h0@As!G2VqHLREBt}* z8_yaJ^JcDIG z;Avw&6BL)y$hqOSr40!;;k3j?B zweSTZk3s_i@UDRdynjOs!2bwh0KvZ^1`sYqS|IW;G!S_R8VIk(av=_!_JO5P)wCmH~m$C=(F58p{9y_%l&nAUFzsKxibE z0V)s}0UPjNo%Z5fH}a`deE)ygyC1kntNQQ%M;4V_a#7JxQAZ;qB}FAeLt}T@T~=A8 zT~zAcZwtH33ONfS49a%zU6Ycbl1+w1Nk)Ci_!`-y)EA9(GBPsM$*{;!CnX~zn~aPM z_4hvKdJPP#eee5z{CUb}AYayA_QJdp{9SG%JFNy^4K`k1MWGd{WV+xKVMF z;-I{6u(i-D4tjRSuwBpyW%xP){}Zxpg2bHc15w` z9K|}tg^C)*zbSSrS`;0MPbh9s*q_hIuPDB*xKnYL;(LmF756C~P&}x3Nb!i`F~u(x zPbi*JJg4}hBB}VhVo{Ot)S>2J#cD;4;wZ(j3ZLR#iu9in<Tk)XcSBe?Myy6wbK~L-1jUrF+c14Ne zJjF)E#fn-*z2YN^cE!gOpHf5=UsQZeF{Jpe;(o=r;^&H|6u(y_6(*tWtvFF}x?-K; z62)%Cm5PrkB8uA--&EYINc}vl;a@49QT$OcuXs(d`nQLgBNhK|{G6b6PEnL7&R0|_ zwkozO8WjP>m5P0ePbxm6_=4gqiaQi{DSn`MNbzgMbBcMzs%NyXDUMZ~sCe_|%{B1m z8ub6uKV9^+ndi(N2MN4MOGhTQe{CFB$}O8#wLzl}^S4Y8|v@+^N z4qGm3V}9jFq?J)Gab&9O(xtu>AH7_b>Py`*X=O~CJa)M()feCKX=T)_J7Kvj)feB1 zX=T)lznwC>Eh+Q8bGa_+bFtzxh&O} zctu(n(^hX>E=%<#T$xrzy~yU}vQ%HHFH9>-_4y*o(za3c2bRlHeF<+(D`VQ?n&q-o zUxJsWl~FHw*>YK`FNqJPl~FIcU1j!jn6`~_>Xyq=eeu<&l`(DguH~{+UwpgM%BWYa zzjl;rBh{B=V_F&Y`macpEpMY_^K#izUxI06slK!>mo4?BJ*|v-byqEyrTXIQNGqdW z{G*hmZ6n{umdjFoDgSs{S!y{xv0RqwOSm(wjCzUdmdjFoiFc)yQ7?LK;m!EpMaf!^>rHlR~ z8TG1vOYrXNOZ6rGWLg>17AKa=Qho6~n^s1>nEo1?cMWm&QK`N}f1g%Hy~y*n z?79`($h@#zmg-CKpVP{iw(c*>WvRXt&!?49FZj3RvQ%G+|DIMxy~ICKWy{;B_?6|d zRA1^|O)E<+hu%JU%W>&ZslL>$N-Im%%Umu?^`-itv@+_Mw@{Y0jjFSk%Tj#_zcsCl zX=7`a%Tj&mKRm6BdcGr<%Tj&Gd0Sc;^^!-Y-mLx4uS8>dM;$vM$CUf@d!dScMN~1O z7**V-_^*C`n!Cn4s))Tse@`SU+w3`VjcHYc53zp%PLJX>?o-P9^tX^~{?t>~m@^bf z{r!>R9o`$i*EV`@8hx8Q%dr7d?RSy?4;+^}KCs5@QdGaBw~K#$t2s~aEjKCZ>|bZp zk8RVwr?u~v?Ygyj{k3@aZ3PW_KjGBC8*8WeuYUBEQ}^?_`P$M0GFD|Cc+kOFZ#iUj z_FE5KlXKYNN8}!P)Z6loKIYi`Ra-8)xcUQIx7A#7>1DMa{Lp{f{%;@NQCGin zSA&1|<&8}rxgxNqxg~gIYg?%Os;fKpe)PZZ`yU_sc=!|7T-*7{>pszI@wP`oH?Me;@ez?cW&uk2}6O^sPI;9sSN-cMpH}d;d9d z&%NIt{lR_r$A0+0kH&ud;7`VX`q0lN9)9G}_|G5v#pL6^{MFR2pZLx6lTSUJ`0X># z&iwAV-_QQx`9IG6>4iTh|MKEr=l}N7-xvPz@;?_}dG$4uk$F(oA=!uK9G-hr-ZA;d z`%Wr2x$u;t(~8e5IlJ`Svh&N=Rcx%hpz5OPtu>d{erWrL>vlHmZv04~IoKMys^g>k zJ{G>F^SZ7Zx^Ify-1GU~FZJEl|FwbJ2k#iVGkVwX_eSm=y)X8_*n{H_O*|5RZ1R^= zPfS0RcxL9g+2`k8NWM7#(!$G&ubIrO?3~=Zd|yFfQE^FWS$RceRrMtw{I`04)1E8a z_x_JheDeBFfA*Fye)+3kzvIrkzIX3^4?OtLBai*^iKm`L&HD#@xzZl_1p_Dy=D$O>8y%Nc3<7~#XG(~@#G7ynS#na zpZ(qwubE5kcuhN+*|d3M>3i$-Tk-DOA8t1}@gJGmVGeNrEx5|{`N}x7`!oOXvp=o* z_rBpLZoK>a1Ks};?&`joytxMck6r`zn7aSZ|IsVt&4qt+4ZOJq-dqE3u7Nk#z?*B} z%{B1m8hCRJ{Qr0j4C~p^OULW^l6+K=P}JzV_Y1N>uGaVbPty1kxqoT*r+s8KAuXN}n{Kc=`zajW9niXSK*RD4*|JueS9 zT5T!LR+K5WC_bpzsR$~*p!lxh5yg{==M^t0GLF$ZT*W&Sn>4Rtd5zjUTf+m=sPBg= z&QhGOxc9gifa|0R`e;pt@y6uA;n0^8uL3jr#M*C9iZQB$WpvbG2mNc z#^lcxPiS~fVYJ?I73V5KdKPz~+^+bH>g>__+o$MM+@P3K{8jO?;xMh#o?@*#`EJF9 ziVrI~6gMiqs<=z>fa2$hrxbrv9QY1Br+e2LbA{qs#jT2$&RS!J<+$RaGuN2k$QKpn z6#d?TB2RIgqEPWlp|+>SRi3@Z94oh|>=H$tqCwH3xJK~>#dj1xR%EO0^j7Wpy74>kOp;zkXBR&loKUaYuP!*|;8ik~ZXoXL4s-jFW_wF_3 z?$fkh6!VJhDr-{gQ{1NbhT=ZOq~ck{tBPZ^ADyf?Pw_#;L#JySC|*C#gyWC#W7l6A5;0A`n`(pE1p!mq&VPm{a%vdXvL|D3l&!>`nA8Dq0ij;ihDIY zc&>iGP5bm_#bt^QE1I-#H_59MA6Hzg{7v!{?PtH$etMUt>(>5wy7rHJt&7;XYfPzz zd*wOWb{n*<6Y@pH%Zk;ilhitVpVs|PRp$xCvx?_b{z>)8{=SQST5W$GU2bB+O%rTd0neBSAKlZV*{m#eu zh5B33n_mAMzEAZ#>^e@XUu7rMPeJAD>rbfug4VlT_x8umKctw_{7b1{q<*G;7U_@O zM)t?nw@>V|wJxULVE#qwquq9PyV)OGKUYzx`dOQo=WEB=pY5t|`(wAC{jv3{-H`rN z`Ww{mR{aCD?d?8be{B5%MTO=cpni2)|3_7SgX-J;#s1j(oo>jOJ}vY9KX%=xuYdbG zrFj2JX?a^Wef|Hh)K6dkZ&W{h{iphqTK{iUKdn2i@9FFRf2Dr<`u|_4pT7RzsDAqT zxBX9F|8G=3z5jODzNa}t`}4aLu_LnG`7x?}q*%lDym`2WeTQeebA3_%8WYj5{juBD zo}+Eu9LntPo2^kDThE-BZO)PxDvEvCre1a^d>a0^{IViP!*|O^6~T9AyK|{+FRp2i zmS-!9Ps%nI%YRcOPtf1iXE?6meHtFtF*K&(PixrdxEs~*fQH>NXg>D5KCTF>-2T{i zQue%iw<1xL?atMWlIv?h2$#&;M*FXKg0`?qfhr<_S zyK|)-uGZiFx97`JMMCBF$8H0A?s0YZWxI2bZO<3*#-FC~_S|!z&N<0XW}CyM9Us*A zcQYK-a0SCj4gWWWi}z%kR)*u6_Tvl(Rem$W5eO$9 zussLbI`M0=%?!gi&C7i+*04QCx_(}}yzcw`+2#C z8s15HwTAyY!{r*jh2dfif16>ShV41l&fllL*>kNOj)t?{IoGutQXjNW*x{Il?K#*E z$8XDa=VDjhpRM1^^UABWEcX0t%af{Kui=ow*PiXp&vv`jeKgx$hkZlkMt!i?V|Kqw z>VFKg*E6Au`^|tMAf1CcEzxGc%?|#j%kl~1i?dS6V)%%F{E&Ca_(Q~Zo zDeN(SNZzBU(eSSs-mc+U4gXcqpkcf32K9NE((hQ<=|8IBYZdN$k;(_&sdvu`+cSGT ze2s?fQQrQZ>I>TE=M}c@2h|7L4_hz5usv3EFl^r(U(2wT)ZD_bo!5|tZTt4TX4ku& zkNv&l2PwC|llp6heHu>v*uKwI=>MMBVCUlf*mY91Uw&U&-X7H=7q6^8ls4WTJEoP- z)_J;2VSnsAYxbMQUUS-GVEOyKZD#8h=XV`1tzXxGtBU2ocb=A(EE4&r?{jekXZEo-MseWo(s>*bHdB3z59 z&u8khX|I3n^h=*N@~O||rJC+0#kUmp9Q2rcNpV5x8gsegO2v(edlk|ZByMn2dvw=sqUJLO&{D8{$OU%7yf2OPO!MPvTn`VOV@7Q{Gqiq?q6+Huq>Qe z5G>Qb0{zR}wl$bk(zf0C{t=Lu(%-Obn>)K$J(h3*L zC3a}D{%zD)t2cDv_I2CV)xC4w2iMiDS$FBWx*HBy_rbMlVXgaTO@&vooK|dIAI{9) zwl3%*m{pgzwytz--N|k_x2?AwR!?$1aJX;i#q-10WMl+$gBiht!k@^<{=i}7J9bp~ zch|QELR;IL{Z%cy>H~iBfh)s@MKoqdTd0256+3n{Ua{ly_WITabEW<=yen?-x3&gN zD$~?#ha2_=8Z<@w&K*0OnpMGEnH70k`Hm}UHgBtLZ3+5YLwhf2Zrat-;J?tnx2k?` zOM9rIK2)#&XYa5`-r60TFRt8NQQ^O;X_tSKKeWx?YKQd8zXz+8D>h%erM@lXZ>?@= z4bfi{&Ws#izT={8%l)rvX$fx8{LPiaUjNr`T;I~Hg=h|K3$->iU%oz2-`2L(zuVvH zZ?-cZtcsnLZRfv!@ z()vKVf4Ne`mt$AKhy1NA)h$iUA#>&EVG*CU>P6bkgXYSpT@P+J(4?hPGZjq@>-@V~ z_W0MT)vNp$wS<~>Gs;}4E#a+EyY9DcTDQI>(9*gsSZ~)=_W_Z$npL&k4m(@4H`u;= ztJPdN;7#adtCvRGrMzg{W!fEDu3lu5S(5 zkwb4dvPB?E5NP4xk0I=o`sw&l**2}h3B=S-gvy8~;l3hdq3-t2Z+J90E_ zZjcBTMdqe)}P^%p=!HA`g z%5qcj{YPm^H(xv5LUYRapn3GF_;xx!94?Uh~BzGtVub-A@fdU1M7 zGv0`;ejO`xoX{L*De;aAs=L0uRmUB-9_Chz)1hN?vpZsFvZObP16IqPV128b-F$kv zog1G$O|r1xs49Q+<)KE~hsFKIY^m>P+S9(r?n@h6S~oQ7XspActrf8yEFIO%m0ic2puJ_&+Fe(+H?`{E))oxZ@7-A6 z;MXTe2X%K4vh}*D*VfjuOCNUsmX`K5|JvpTr&d*4i;nhf+DTiQZS{y(eSLjU#|6KR z*38+p+2f6*Xzf+?O@aEI0nM_(>r?NF@$0lVHn{2fR+KYu+gkrIC#=;%FvImN!M)2Z zF3ok|b(N@}+LVJUXYXzP)X1R~Bkc;Z4M$g$Zmy_lxj5)=-c*&EbA8(tw%YK@Y8P|5 zw5LZqdSvD3wk`EdZY7ScDBsf5+S=0E#;omhu@y^XdukWGx~an-NZ%92URO;!M5Vv! z@^r&T= zUQxv@TU({NZkIo?Vq99AGb`HE@iDbM?A3-QoLw>DwyT>$yBcd+Qk#0t8>^MXWHqhz z&2730S+}>w?x%JR$)!3MHwT)UQy-kFrZ%@u=e^N(LoyHVFty;7)79mj)a~AjD@HQi z8+;VQ$GVT~@?yO~|2miIxQoOMSLsOBwyixF)K+cNXLNJ3F3+y257=etqHbf8KVXk9 z-UUFF|0=&5-R+IOtiDxOYx>Z?!H1n1?!v)Mr=yk5y>{k3#~!ESOF(D-^*T7VG;>7l zJ@&}*9UC`#M{4gf($?!^`k{*8Wr!%khI>1a^Dvnikh zkar9j_^&Fb&gFKlgXtC7Fw1QYrH|d_Z*ExGXv>~G_00`-Hqn(8S9UJFy|sNL-aBkAMqslC3neve;U%Z(jfF*bD_5nEa6T|kU^g`3+}blLWG+#AEfF0cIw zyR9~AD_-R9&>16bbH(kLO@3XQ2i&HZv|C)A=Nzf!+ok==&U@-u-9%J2HTbvqo7>mb zyUT&;WAn;&!@wTxZPv}ryIYp8lkJoVuh!CSg*}#Ssn;h{yX1y|e~;aRZM~WO>Zu#) z>v#6pe|dMJiRWHF@zT{ta=&p~{g>~G!b-_xRxioJ}tdz$UT{C-up?P~Nlv8W@FG=4*gZoeNFE-K8>+0#S?`~^TbKRo5?WUl2*pKdC z`;z81HvPudmOW{ket4;-+rPBo?IBkyVrh39@oH?=9%gT3H@9g_lRK7-t{h`Ojdm@> zykhT;WOLhwE8FV>H7$0`So)Z>^WgZ(^3-W}!Yi)c<}MdnuJ*TXYiZZ9w9S4f?fl~Z zszU1gHkqnmKYYtGsPMP#YHbRpE&`{#THeNL-MgVV)VkOE^snE@N0y`Y^c&Q)v)09Q zbI46+yOr>2arLC}sZB(QcX(J)DOJNxKAW#Y(}n9ao%c8+^*NZcFQ_@1dclU1d8=C^|e7Q)~ZT|Y!U5(ZCp++5mD|B(aOIumX zyScfdWsfclTyMk2>F)pHZEHg5kp#9Jh6jb~pdt`qWv8L8HjdhTQZy~(PfWU zGICtLoxkquuWD#I%hnmCWKT;2B{4UZzoW^0=EhvE%^&*69(PwhZu9lKTHMB)aG5sm zNE>$+?B#y% z#2azBK#R9+dR#8mNUzHU_0%rp`q=04I5sI}pU}@SgfzjXUahwzUM>L;fAM0o(rM z(kNT9Q_mH4G;u(k@ELZ5*<#&he9Xi*v z)_d36i*GP`kG&wXy$GMMH1nltLyfI1SKE=DZ#1%Xulk{rovqOIuPX4d>s}har|oik z*=;9^>|dz+8Eb-8 zkJjE3;_^LgFFk_nbZ!2CJMMO_EDY_c*PD}oon*yo>e{c`%GKY!|JbzE?_O6dwc2#K zJvXnIb&s34-8*IU+RT-DHt6=`KAY3_NF4_IZN5#Xzn$JyzL(XGU=Q>=bTZNPQfRM^ zw(e$U@L!Gg&c8!$v_GKBtQGxCf;A+Llse5*! zF_&$+T*pg}sNWOgafA*s9C)rl08af=_bRSw#@w*I`!*Wy?NpEOcT37e~4n$W%i!dBr^Qw>zVaU zZF;(4-wc{ZH=9)(&EGS&`1hEFv)!8oJNW9^CZpP1yQ)dI$}gU+Ki+NUkk54)^g*X11A|4)z}Tc+X4CH;&rX(%N93d)XCp>oM*<`Jd0Q7q#!TS7$XkS+<%# zRH)Z>h6no17Z0r0McY@837MzfuG=s3&y!nr+qc<%d)ajDdXo_{|9;>e^R-jWAxkY+ z>Jef<^ZDa}>&@hv4d!RLmD;b(_z7Fg^C#7q&lGIc91E+>*Wb-@{IYagd+Todn)jNu zS_`)6RXQSl`XF5hYjfz@AYkXWaFjj*55C8&S!@4iFY#X$y&d5oB2}KHm!r(voGKN0PJ>5tkvvvS!;R^(J9!BzRRrgmcVt!j2+^2*UNo%V_Kih%tm$3wGjU7 z>H~O0{C9Px|FgC;7uj2`zZ^ohuU)NsLaZ1gB_4YNPcTip3ZhmouZc_Mg zC6CZ<>W0ndbL~4TJtooFc!Ta$^e#r16>a9eBF*^brS^ZVb`o~3nfe6&W3_gL>kqx$ z^u9y)`|I@N-^{Nw2VS=J(j8kbGk0fKXzul`HU2$%p=sZBK6Q-u;LKe2j-?mk-S1ep zrP@{>*XJnwIn8-htKV-P%eFVbUe~V6)!q0fk1_{o#^#f6^v!F@ZQuXbFp0ON^{f#*!gB?M+uqR-r8UmPGu{Y@4q!w`QCNji!Jl$I`yN+ z_M^!>@mBk`Wpi7l-l6K!cPL+{h$55G;jPX2w>CHJ(R*P&n7`3SsK00R0d(uyL)EUG zPo`J<+lP9`{()0c2h?ZJNHspHWlw5SHu8O%G;)jWa13Yr(zxL3{Qd+$o^>wssT%yFCHnqy7Ydi7*^>VdMF*#k_pDy_K-VY!CN`*o$25?oQ~$~uH@$Cp5T4{2>aSm z&qeKx_3v}FOkc7sZEz#+Ji?xF+RV!*s6|`8$`wECrm+VWwRBXoxkD=|?k3xlI&eIH zMC!x&W6d+Ek(%?ZZY|up`hYeQR%zVjlP({zE%&+cO4YvYmHBpVjd$Vm>Uvf0TYZ2% znd?h#=6*XrUFt+C3@@G|#g&~=)>)t1@&OLLE!jM`~4=wD!I>XRa;SW`0tjPTJ~rPTqHz zzLjV0$x};iR^hL@87kG$%p~%buH_fOyqMR~)Mjot zTC;YOCtMo-nwynUHKuE5Z+g>rwE3N_>B`sI35Snf*B%P#cyO&Y&?&G(auOF|sN%k=pFXMlDymp%vFUuc2zS>@0 zn72UHMuSt~}w=@St59_uU5b zll-O4-ml5~?Wlt{n`@4{$Xw@hi}N2oyZe6E#~%CaiD~=sA5QcZ@e3#EjKO*POUJpd zwC=KBRQt+_YFV??I&x|FKWxihciYVU$F1$qh01SiyZ@n!RDBW4evTehKBkJA$fe;s z+#C@Yo?tSTHhA;|+l2>gW2&siT$*rc_)gnJ`$D~%2SH}~1oMoot1+tU z(u7OH-*#PaY0RYwr6$Af6`%8IulV|jX`lLk_nB||)bFU9$fYr*=0NWX$Q@*U?Q=Zs zTWdabVx=Ck{O!bb=AYVp32&>(_%y&<6pN3Dp-5s1Cd%ImjyYwBDpPb|!lpof# zk?+}Qqe@LigI7FrlKsqm|D8JgxZ)PdKk;_$9b5GPe6RW2$vWG)k=s%i4Yzu&Oub$6 z{7*YK*Yfh z%PZaEH|xJTb7%1l&Gxk3V19Lh7T?Vza z0eiNX{w><20)eFk95{Jt@Q#x&cHcf;y7T$7-9)Zmk?-3Tv{dtv{cHX~HKVGdRpM%1 zYMwpWd`VY8Nmm#db&KfIxKfkJLab})FyDUXwkF+w>AOH~xopvQ-^ndhZ|X7Bk96yj zbkj$EV7ub&g%7{e+ueSl9WAPIHSfmy&CEMDtJmvWvaa&Jh-x|u-LsjePP?kf ze!a~+s)rQb3~niO*QgH^suee%$bGhzw29sLQEvthoT=tiLCv{p-rdG83tP;zoq;!L zODoIpXH8`0PSrkrzg=>7vCOFGyZn3VgN=H~VLpGVo&jC07yI5*16}StaC-U<^-!tW z)C|<7OOtkHdg%7^cX{8&HQ&X-4-6k(k>= zE{(f1>C(s#)y^vKp^A6g_R~|`M?`0;x%E}s%ncRlm@27bw(3D%rO2t?f2t$A9fSz+ReUF z_}tQSfv?!-0-f(w0}r|eTpCxZd()+d9;t^2553!an&5tuqs_$Mt=YN>B0q5xyEOij z)d#FK&uLtE+?K}1ZT=jLV5 z`|y9}47F-&X7afC*Tvqw;naFP%x^PySGebUH*QFq)ho-hx;|}Iw`f+8M{Ltkm&RS1 zbZO*KyFTn!U(B6n=+(7*X!W~wW>xCb^Q$vHc*&)y%#&w$pP$r1{Z;!|RCCY{?9!x5 zBXP|$%i9dx?CTUXdZspvr{Xw^pfaf$tsk~`mhS|8N<1|B=z`JU9T zR}8;Ljo4Xcuw^IDbW_fqrDj#G{n3uiy2Yut3!rA_{;-D8IFv+T1G*TCdiI{E8z zGodLXKi_|v2bQOKWOF*GOXAYVq^+l418Ft)m*}fe=F4^!*uqub?`S<);yy8dDshYTik*DY zK4$p6hLWnMrXIKXzbhYo+;!UJKc)F3T|V+lJN^rHzQ1(imEX`|25kjb5c!oYj=D7N z(xg&z$U5B&rgn$%voFyDxwEVE&48+=ovr%)GxLWF?DqZh1sgi_cGI5rmUn>rFWhE+ zeBpZclE}Uiuopm|sM=D0h5h<=t9}0Qsj3RSEDgE)W;^!5DtA4yR^MJ|+Nl>sdaPZg zMVqo~$Nq+3svmP_2hzH5&xPu@>S(37H0jdFuif&vG_KUFx}?;6^}SUa%s1Y^ac>=N@^756`3YpeKCTl^ba{CgG0Rjfn8Z*1D{(wIvVO5My~ zwKMN5)y!|z*)%-OTy81VT<$8>T<%kGf2w%M7LVBCF%`#Dtk1to!%w;=~ClMl}o?)GE}+6JYKoZe0}rAc3r`HSC7Bnyvcm( z0=;I_Q#13mbL_8hjZ~^Lnxopb^R<`k`U2Pw&e2=6==;tK(*zr{TM zel6J3u6s(oC)Eq*=vzqU<@dWUWrfQ%KUX1PD;(^7S!(25`vSL2pGCc8zqwp@aJ}VM z>WScBdFuV??OVL}rbAoQK*BYk)MRSTzd1K#Zav?A-RHB zD`E4a_w6!2eV_Z*({Jp=ZZdr!AAg_TW&Tzr;b&auTpClVi=<}rqNZA~)m?$Acb4h= zdqbJ3KkKS1HCX|3Z<&2}-gRE9x#_(2V5|A+dArQF&eIbH^T>I6={kCT^DguE^UW&F z@}aU_CSG=RtNF%x>YtrHL-U=s^SwqT30tx%w7XOj2X<-9Vp)@26;GTOFfVI-c*eEs z(wI_p^D1-edG@{fxSiaM2>;GiQfgLd!~^GP8UJ!VUkCWKUCpjS!lmKoTxFNWl&W>L zH-BEh@|pAX&9v*Z?Gtv4ZtCmJ_2;`Wx16ue{N7FK(wI_{(PC~tU*A%^|NS~;o9Oww z&G%F-;VOh@?Ysl#XXoo}{p061m_KS%|Lp1m0_JHA#oW;EY;{%Cy#L_l?b4W1lc9z9 z)caY8&uJkNZd~|zS5K*4Dg?ck_TPHHx6@7NAQN-r6D|$^(bfIq>I2R+KeemDME_{CT;%CNjS&*9NvvV4k%r*HsVy+0E9aF_$L(>|J`8msBa7bfcA; z15=lD-&?y?ho(t=Z&z>S?1jg3YnQG;KEH1Hob@$5nvJ>X6D|$^#m&p5F_$J>8h+80 zyELXW?UE$2ZfVYaX>%UboRhA8^5^iw;bD~$ZjRrs4d zk3Fr@xXUM%cPIGLP1t^jd*Axg4fYEj-iu}Pnw`g@YjJV)0eXY4-)%KdsW7g>rB}-T*x=nJwwZ5i zR6kw)$Sbyjd+v72M)%72R*j3QR1>>2>C(uns<+Cm)CV{6iYMPP2@D!cC`CE2CwPc8Y5%1NE1;nJ!!3 zjf`Alt3+LD{|b@HT^i9}8&bJT<1S6QG}7sMsdMzBmE27H$zFGR#d_uH{Wh-oOXc#f z=9(|6MtuJopWB>P<16<5P&Kp~KIs}(sv~i$zC@s_^&f0r-qr8Xu5SMXlj^%Pa-FO1 z(zr{LE{%N3mAf?V(&VSI53rZ0ZRQj9h%Sw|dwImqY^xff zR$Uso-p$>mahE1t8o9xhyEN|7q*5L1^s5JY^<#gz(A<6D(lw;{=Y^@u%}-a^`v`Y? zX|I6ptg^r2;9iMdRj-q?z0|zX&D*7Mr8;ef^cU__jpqn4y#!jG_1`XBF^6HzA?c=# zbi4VuG_KS>M0Vd>`dU@$N_fy#b`>I@c9mTkcWKh4k(*q(OXDt0x-{|`SMJidOOq~* zL|pkRHch%T`l=gtY4kNW?9yoXt+tL!qn~iYE{$HJzhtDxQf+PeI`3Bm zMPHkC`HQxBPkDB1Znn?3b_V!GOmoM@del`>Wp27?eao(v`W@cV+TYaiH|uzD+r{P} z`^P1oxhVB}7%lpZwl@7Lrv0NI*Im5)Y>sfukQw%PPlZ@r9(H`l4+NAciZ7nmyYzWHAVO6?*i$H z^Gqzo^RWUiz-qh{x8qK1#AXcPM=^}oVK?54y?7fA;2jvn@8KvufaCZGPT~`oz~^ud zU&IA`6*KSk*3TiBgGXULo`i*X8kXR>SdJU93b$e{ei$3@BN)W1a35ZSU3e4r;Fqu; zZ^t3L3rFxi9K(k&j=#iddyaS{7Jsiaca2y}O zNqhnm_#DpRi@1QVV&)I{{9_Ith52|A7UF4Gg6Cp6Zp13winaJ*Y`~9T5U;|0cnx;p zP1u89!hXCRhwv^O!TWFwAHq2P5~uMQoW&P#9$!XtAD@5B#=|iWkH-Q$1&i@)EW>qJ zi5FoFehBMuHwLg3JMd%Ji8o*bKaYL*H5|k{aTxE#7(R#-_!v&%Q#gaqV-jD&Ma;OL z&p#fDxp)lv@MJ8)GqF^@Mb`t>cq!H~K8RtAU_VANhH*?_5>3qOZw~sf7|XF5>oAC6 zj9@=TF@|wWU=qy_X&-%9jOAF3br{4jMz9~F7{fRwFp1^?+D9K2V>wo19R@Ls5$wk( z#xRZvOrrS_?V}Hiu^g+h4ucrR2=-$XV;IK-Cee)1KKig2%dr~kFo%A(TvkR`mh+wu^Q_zh+&LiKSnWzaZF$m%};3`eOQd; zSdDcU#4tv%AEOw#Th1FPtwYVMYumKw}fI$pl2kyf#c48NHV+4D!7yGau2XGLFFp9%C zf}Fu;WQ?224`^&lQ@qHxQON{wm)WJHs)Y1=3zeiumB6O2#c`vcx3ahaOYjHc)VFNZ|0D~C94%~-f?8GkY#t8OcFZN+S4&WdTVHAgP1V=H3V>pfz z7{^JR!f8z449?;lCUG7Ya1qVZY=6wcY|O!2%)@;2VF4Cm5f)s}*oj@(jS=j@UhKnu9Kb;w!YB^o2##V5$8a1cFpiTrh0~b8 z8JxvAOyWE);3Ap?+aI$q8*?xh^DrNMSb&9CgvD5brC5gLSb>#Th1FPtwYVMYumKw} zfI$pl2kyf#c48NHV+4D!7yGau2XIX4|7*w`#|ez%Bu?S9)LWO#1kPaQZ@ul3jk%bQ z1z3b7ScVl?g*CVx8!&(&+=rdmjXl_h12}}kIErI9fs;6mGdPFyxQLn0u>6>d`B;EO zSb}9(fmK+8+pz%y7{YzniQU+PeK>$aIEh7&l6(>Q~3IFE~%`7FzixtNayScD~5 zh80+aHMkucFn}T4hn?7sJ=li>IE2GEieor|Nz9z_mMag7upDc!5%*yP2XF)@FoE-! z^*gVfd@RNati=F^u?Gin6yrF93z+?!*NzWMuoAap5IeCKhcJedIE#yz^LwwI0xZQU ztiup?VIM|u45x4o&8#>7Tr9*gti}fHz;5ivVI0S4Ok(CAyms=i2+Oes8*v{-Z~#Ye z0uwloS8-&&5J4!)k264(!H$9L8~+#w2FG;I)&7MOcnC*ogZu zf&(~$6PUnx%=)v}PCgc61=eB!!`Op^IErzc!3E4tdhPhI1S@en2C)-+aR_5LiLBL`$8iG9D_;N0u@NIUf(i7!>ea8qE{x)cwCi&eV>mALe*|X6 zaSCUp-Om;<>oqT*hlN-w_5UnpR+6v9M(n^Y?8QMG!Ev0zSzN#@{V$ESKY3V)rC5oz z*oYn2g}pe4BRGyzIExFIbpY*SA(mn#)?y=eU>Ek{AdcWTPT?#rU{(h0qfgrXy8sKZ z94oLAtFRhtuokyt9X4Pi1~7;r?7)2(#!l?QZj4|L_F^CQ;{Xog5JqtrM{pElIELdm zfpMI~DV)Xx&fqN0VG`$Y0T?!849l?sE3pcz zu?A~#JJw+XHevvS7{U(Rhhgl*F6_n#_FymeVLuMwAP!*^hj9c)F@|F}juRNiNu0uI zOyCU8;v6P%9v5&CO(xqPvoITTFc=E3}FZE!!UMY7j|O=d$1S#upb9-5Qi{|!#IMY7{f6f#|ez%Bu?QpCU6F4aSoF> zj|;en=0LVTW??qwU@qoiKKif#3$X}`u>?!849l?sE3pczu?A~#JJw+XHevvS7{U(R zhhgl*F6_n#_FymeVLuMwAP!*^hj9c)F@|F}juRNiNu0uIOyCU8;v6P%9v5&C%|UE` z%))HU!CcJ4eDq-f7Ge<=V+odG8J1%OR$>)aV-42gcC5n&Y{UQtF@zns55w4rUD%Bg z?7?2_!+spVK^(#;4&w-pVhqP{949c2lQ@Obn7|pF#W_skJTBlOnuFQ?n1$JxgSnW8 z`RKy}EW{!##u6;WGAzdmti&p;#u}`}?O2Bm*oXlPVhB5MABM3LyRaK0*n_>;hy6H! zgE)jy9L5nG#Tbs^I8I<3Cvgg=F@ZBUi*uO7d0fCnG+Ata%))HU!CcJ4eDq-f7Ge<= zV+odG8J1%OR$>)aV-42gcC5n&Y{UQtF@zns55w4rUD%Bg?7?2_!+spVK^(#;4&w-p zVhqP{949c2lQ@Obn7|pF#W_skJTBlOnzyk1F$=RX2XiqG^U;R|ScpYfj3ro#Wmt|C zScz3wjWt+{+p!KCun_|o#1MAiJ`7_gc40S0um^jw5BqTd2XP3aIE*7WiZL9+ah$+7 zPT~|!V*+Pz7UwXD^SFSEXbxffV-{v(4(4JW=A#b_un>!|7)!7e%di|PuoA1V8f&l? zw__bPU?T=Fh#~C2eHg}0j7t05W*A3s6k|As<2ZqFoWv=d#stpbEY4vP=WziS(X96R zmx)=JjX9W$d6?rv#&Hs-a2gXhgR?k?Nu0+8Ttt)2_Qx#D#vIJW zJj_QQ7GNP3VF{LE8J1%OR$>)aV-42gcC5n&Y{UQtF@zns55w4rUD%Bg?7?2_!+spV zVI0BCw|eU}3$rl?b1@I|(T4?Ch(%b8b=ZK77{DNgumksD7(1~GyD@@2*o%GGj{`V} zLm0(j9KlhH;TVqN1jca^r*Ik*ID@k|he@2r1zbdPDEmETVK(MqF8Z(l3$X}`u>?!8 z3K3%H184eJTBu>WxHJU<}q`OO@` zd0*OmkbEch;tpF#XpZ#epNoZ9hSk`B9oUWi zIE>>sjY-Tr%4;VNi?AGPuo3rR1P5>gCoqBYnDsWVoqR0D3arHdhOq|+aTMb?gA16Q z=e6U*60F4S7{pHO#UYI0B+lX@<{a&{Q-Gydg>@LhF6_f7j^Px}p*hBze=Zhc8CGKh zc3?O5<1minG$t|gSg)NtEW&cE!A9JN5gfn~oWKOmV^+S`PCgc61=eB!!`Op^IErzc z!3E4d&TGeqC0Hlz`_%?)!~g~{gdMmK!`LtF@nZl7rG3vggi*?eafI?1`7s=)JWhTR zrzoGs8OrBy9v3nDc&|UXn2$azz(Q&JS%k%umtZO7rreufCT3wa=3p-7VLtk>01L4Q zi?IYtu?)+x0xPi!tFZ=aaXZ#w12$p+gBZdN+=pT8#4hZ{2=-tv_F+E`;2;iR6o+vH zM=^$DIF1t-$4Q*RX-wb@&f**01L4Qi?IYtu?)+x z0xPi!tFZ=aaXZ#w12$p+gBZdN+=pT8#4hZ{2=-tv_F+E`;2;iR6o+vHM=^$DIF1t- z$4Q*RX-wb@&f**01L4Qi?IYtu?)+x0xPi!tFZ=a zaXZ#w12$p+gBZdN+=pT8#4hZ{2=-tv_F+E`;2;iR6o+vHM=^$DIF1t-$4Q*RX-wb@ z&f**01L4Qi?IYtu?)+x0xPi!tFZ=aaXZ#w12$p+ zgBZdN+=pT8#4hZ{2=-tv_F+E`;2;iR6o+vHM=^$DIF1t-$4Q*RX-wb@&f**`=p&;Slan@Vvn@-d!?;EByGJY!SSd1mO9qX_GyD@@27?rl2QSvby!+Bi5MQN|AO(p%oENRQL$>(4$ z<$2`u(MNd^`C=@gyqtUmR#IL?z8Y&NuO+`7>nLv^--rRqgXBZlLHR!NVeF*5i+ndm zDDNTPi+z;$lOMoA%7@5DahUQE@}n4|e2n}!PEZ~vKZ#S6&yb(RIm(md=W&7ZMe=4d z+f&-@m_t4n^C-_J@52Jh3&|H@G36!XOR(!CETX)ad-n$% z3$a8Vqwy8e9``D-O4|Lumhp`kVtfbg!!UMY7j|O=d$1S#upb9-5Qi{|!#IMY7{f6f z#|ez%6i#CTXK)thFp2ZHfQx7@V!y*I%*Gtd#XQVM9~NLC7GW`#U@4YiIaXjLR$(>P zU@dOPI&8p33}6sL*n#^njGfqp-59|h?8QFp#{nF~A&lZMj$#bQa2zKvj*~cr)0n^+ zoW(gz;yf7ap)Qe6@ym>&S8PSKhJB);Uc{`C&$X z>i+;!z_2YZQ1}#f_#!2#VOzgW^&g_X9kzA;tNLNpd7Aom_UQeLI}0pOe;~ z)UfSORCNxk^7?OwQ}t7Q-oO8G)p;lN?eIAo?$o^PPiopQ!*<%#ux+dQaAN{YYlleuPuZ-;ID)Ud7JubcXB zQr`}z>ibnURo@QZt2!s^1zNe@6aCB%>!FITAjeEIT&`hTzriN@al_uA`K#(QFkG<3 z+kd`u+w%UCqX#gTtK9BCcGym9m$6!5hi#uz!?w?Ls`Gy_b|>)C*K-@ke`jXyNa`Mv z#q){s{x8J@L2zY+#SJZz0(9 zZu;_ZDZNmhO~d`)M6l`ETOoK3tY4|853+F%ba34FP_IBAs{RoAo9Z3Vr>P4xXRho# zxfo^z{*8a`Me{n7pC|ptr}UCH>VAsm9Ims0zihnA1HCbN2(yJen})uFAE;&1yXl)x zOlcc=wtWNE-c8?z*;SrxpDGL9J@NS92ic?T56t!!;>uB`*Ji9FlBlX*A&0On2dY1KI0&8p6gA>&>eryJQokNOR=3erJagoI@Kd-CuA@G175B&W zVSImlC;I>0AD@xZ*Ks=^Pa9~jzn-n%&GV-TbGke`@-3K)%miz5jPYFW&!kY|QDJ&-VO!Hs8(d zZNOY4&$e%5-c8?v`J+7Be)0Lq+gG;!yYaqW|I@dguK)DxdR}1WhjBa4AGYV$v-P+q z#|!53^5qhI7v^Mnb~L{S^9y-)GrZCKZI$>vm-x(d8s@*@?)5H z$+IJ$o|)3_^6bdhVGfsP+xr~j`S0fOZNi)>&$e%8=YxB4KEV7^zRY|p^KSY9%#HGF z&o49Yrf)q9|7XUxOph1azL$A7{Rrk!@@)G$f<2EnZu;@FQ+kd(n}(049sIR-)3=|4 z8S?DN_hGh`XWM%pay@R&PtQ&1KzVlL+c3v@J(>4&Z_am5*8hB5uk6vD-^{kxO<%(N zQl4$kU{B_&Cw>!Luk6wGWj5bUpI(6LzdYN%$h@1rfT_P#*Q?C8GViAE!)zqa_I#Up z+~B4k!)zwcwlCAP>D~0j3sZWp*Mqk2WZq3bgxOu5ZQstko4)a)ln#++N4|hL*6Yc< z_aWEs=KK-N59QgO-$StJ-Sp*4@Hv+}n}+w7;-L%PO+S8ZN`IAS+c&fAb<;OC$Nl|n z)8oswA7tK5KZ1FbJlnp5V9(=?o4)n>ls1%S({TO0?DJyxWd0jddYR{=?O%!aVRJrv zE0_&1qxZq(>Ah?`SLE+i-hqwhdp$hI+e4k6T2BY5Tj;~ouS9d^${xp$gIR%p)cNjyKyWt@rlneq(!`Ed-nEbaT6kH{ntv&!*viC=qOWH~n~vlwK>(rlI$>l-^CB zwo2)p@@)GK{)tWRrtiS)BG0z(E?e+!`tjRRI@s$$e--^H%;g`yZ@;$izHYv6@7*a~ zruSt(;8)AMn!b$}0dJCL+pn2<_sWjleR$s$)1{>szGHgq&dQ#Hb+%7wKitmeU~JFF zVVv|l*P!Nl`Y=bzv+X;XchlE*z%^f<9r*(05_xvyhcJJZXWRF(^|-m7Vn>*F>Ke|5 z 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 -~=K-4Q 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