mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-29 07:02:12 +00:00
Fix a couple of splitscreen bugs.
Fix Quake3 connectivity issues. Prepare for displacement maps. More tweaks for 'quake15'. Fix vulkan double-free. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5398 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
aee6767e7d
commit
de20b1e587
25 changed files with 673 additions and 140 deletions
|
@ -1032,8 +1032,10 @@ void CL_CheckForResend (void)
|
|||
#ifdef HAVE_DTLS
|
||||
if (connectinfo.dtlsupgrade != DTLS_ACTIVE)
|
||||
#endif
|
||||
//FIXME: this is switching ports far too much
|
||||
NET_InitClient(false);
|
||||
{
|
||||
if (!cls.sockets) //only if its needed... we don't want to keep using a new port unless we have to
|
||||
NET_InitClient(false);
|
||||
}
|
||||
|
||||
t1 = Sys_DoubleTime ();
|
||||
if (!connectinfo.istransfer)
|
||||
|
@ -1112,9 +1114,13 @@ void CL_CheckForResend (void)
|
|||
|
||||
contype |= 1; /*always try qw type connections*/
|
||||
// if ((connect_tries&3)==3) || (connect_defaultport==26000))
|
||||
#ifdef VM_UI
|
||||
if (!UI_IsRunning()) //don't try to connect to nq servers when running a q3ui. I was getting annoying error messages from q3 servers due to this.
|
||||
#endif
|
||||
contype |= 2; /*try nq connections periodically (or if its the default nq port)*/
|
||||
|
||||
/*DP, QW, Q2, Q3*/
|
||||
/*NOTE: ioq3 has <challenge> <gamename> args. yes, a challenge to get a challenge.*/
|
||||
if (contype & 1)
|
||||
{
|
||||
Q_snprintfz (data, sizeof(data), "%c%c%c%cgetchallenge\n", 255, 255, 255, 255);
|
||||
|
@ -1221,6 +1227,8 @@ void CL_BeginServerReconnect(void)
|
|||
connectinfo.trying = true;
|
||||
connectinfo.istransfer = false;
|
||||
connectinfo.time = 0;
|
||||
|
||||
NET_InitClient(false);
|
||||
}
|
||||
|
||||
void CL_Transfer_f(void)
|
||||
|
@ -2661,6 +2669,10 @@ void CL_Packet_f (void)
|
|||
}
|
||||
*out = 0;
|
||||
|
||||
if (!cls.sockets)
|
||||
NET_InitClient(false);
|
||||
if (!NET_EnsureRoute(cls.sockets, "packet", Cmd_Argv(1), &adr))
|
||||
return;
|
||||
NET_SendPacket (cls.sockets, out-send, send, &adr);
|
||||
|
||||
if (Cmd_FromGamecode())
|
||||
|
@ -3265,6 +3277,7 @@ void CL_ConnectionlessPacket (void)
|
|||
{
|
||||
if (NET_CompareAdr(&net_from, &cls.netchan.remote_address))
|
||||
{
|
||||
Cvar_Set(&cl_disconnectreason, "Disconnect request from server");
|
||||
Con_Printf ("disconnect\n");
|
||||
CL_Disconnect_f();
|
||||
return;
|
||||
|
@ -3363,7 +3376,17 @@ void CL_ConnectionlessPacket (void)
|
|||
{
|
||||
s = MSG_ReadString ();
|
||||
COM_Parse(s);
|
||||
if (!strcmp(com_token, "tlsopened"))
|
||||
|
||||
if (!strcmp(com_token, "isconnect"))
|
||||
{
|
||||
Con_Printf("Disconnect\n");
|
||||
if (NET_CompareAdr(&connectinfo.adr, &net_from))
|
||||
{
|
||||
Cvar_Set(&cl_disconnectreason, "Disconnect request from server");
|
||||
CL_Disconnect_f();
|
||||
}
|
||||
}
|
||||
else if (!strcmp(com_token, "tlsopened"))
|
||||
{ //server is letting us know that its now listening for a dtls handshake.
|
||||
#ifdef HAVE_DTLS
|
||||
Con_Printf ("dtlsopened\n");
|
||||
|
|
|
@ -278,7 +278,11 @@ char *Get_Q2ConfigString(int i);
|
|||
|
||||
#define MAX_PINGREQUESTS 32
|
||||
|
||||
netadr_t ui_pings[MAX_PINGREQUESTS];
|
||||
struct
|
||||
{
|
||||
unsigned int startms;
|
||||
netadr_t adr;
|
||||
} ui_pings[MAX_PINGREQUESTS];
|
||||
|
||||
#define UITAGNUM 2452
|
||||
|
||||
|
@ -816,13 +820,14 @@ static qintptr_t UI_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
{
|
||||
int i;
|
||||
for (i = 0; i < MAX_PINGREQUESTS; i++)
|
||||
if (ui_pings[i].type == NA_INVALID)
|
||||
if (ui_pings[i].adr.type == NA_INVALID)
|
||||
{
|
||||
serverinfo_t *info;
|
||||
COM_Parse(cmdtext + 5);
|
||||
if (NET_StringToAdr(com_token, 0, &ui_pings[i]))
|
||||
ui_pings[i].startms = Sys_Milliseconds();
|
||||
if (NET_StringToAdr(com_token, 0, &ui_pings[i].adr))
|
||||
{
|
||||
info = Master_InfoForServer(&ui_pings[i]);
|
||||
info = Master_InfoForServer(&ui_pings[i].adr);
|
||||
if (info)
|
||||
{
|
||||
info->special |= SS_KEEPINFO;
|
||||
|
@ -833,15 +838,6 @@ static qintptr_t UI_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
break;
|
||||
}
|
||||
}
|
||||
else if (!strncmp(cmdtext, "localservers", 12))
|
||||
{
|
||||
extern qboolean NET_SendPollPacket(int len, void *data, netadr_t to);
|
||||
netadr_t na;
|
||||
MasterInfo_Refresh(false);
|
||||
|
||||
if (NET_StringToAdr("255.255.255.255", PORT_Q3SERVER, &na))
|
||||
NET_SendPollPacket (14, va("%c%c%c%cgetstatus\n", 255, 255, 255, 255), na);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
Cbuf_AddText(cmdtext, RESTRICT_SERVER);
|
||||
|
@ -1084,14 +1080,14 @@ static qintptr_t UI_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
{
|
||||
int i;
|
||||
for (i = 0; i < MAX_PINGREQUESTS; i++)
|
||||
if (ui_pings[i].type != NA_INVALID)
|
||||
if (ui_pings[i].adr.type != NA_INVALID)
|
||||
VM_LONG(ret)++;
|
||||
}
|
||||
break;
|
||||
case UI_LAN_CLEARPING: //clear ping
|
||||
//void (int pingnum)
|
||||
if (VM_LONG(arg[0])>= 0 && VM_LONG(arg[0]) < MAX_PINGREQUESTS)
|
||||
ui_pings[VM_LONG(arg[0])].type = NA_INVALID;
|
||||
ui_pings[VM_LONG(arg[0])].adr.type = NA_INVALID;
|
||||
break;
|
||||
case UI_LAN_GETPING:
|
||||
//void (int pingnum, char *buffer, int buflen, int *ping)
|
||||
|
@ -1103,25 +1099,27 @@ static qintptr_t UI_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
Master_CheckPollSockets();
|
||||
if (VM_LONG(arg[0])>= 0 && VM_LONG(arg[0]) < MAX_PINGREQUESTS)
|
||||
{
|
||||
int i = VM_LONG(arg[0]);
|
||||
char *buf = VM_POINTER(arg[1]);
|
||||
char *adr;
|
||||
serverinfo_t *info = Master_InfoForServer(&ui_pings[VM_LONG(arg[0])]);
|
||||
if (info && info->ping != 0xffff)
|
||||
size_t bufsize = VM_LONG(arg[2]);
|
||||
int *ping = VM_POINTER(arg[3]);
|
||||
serverinfo_t *info = Master_InfoForServer(&ui_pings[i].adr);
|
||||
NET_AdrToString(buf, bufsize, &ui_pings[i].adr);
|
||||
|
||||
if (info && (info->status & SRVSTATUS_ALIVE) && info->moreinfo)
|
||||
{
|
||||
adr = NET_AdrToString(adrbuf, sizeof(adrbuf), &info->adr);
|
||||
if (strlen(adr) < VM_LONG(arg[2]))
|
||||
{
|
||||
strcpy(buf, adr);
|
||||
VM_LONG(ret) = true;
|
||||
*(int *)VM_POINTER(arg[3]) = info->ping;
|
||||
}
|
||||
VM_LONG(ret) = true;
|
||||
*ping = info->ping;
|
||||
break;
|
||||
}
|
||||
else
|
||||
strcpy(buf, "");
|
||||
i = Sys_Milliseconds()-ui_pings[i].startms;
|
||||
if (i < 999)
|
||||
i = 0; //don't time out yet.
|
||||
*ping = i;
|
||||
}
|
||||
break;
|
||||
case UI_LAN_GETPINGINFO:
|
||||
//void (int pingnum, char *buffer, int buflen, )
|
||||
//void (int pingnum, char *buffer, int buflen)
|
||||
if ((int)arg[1] + VM_LONG(arg[2]) >= mask || VM_POINTER(arg[1]) < offset)
|
||||
break; //out of bounds.
|
||||
if ((int)arg[3] + sizeof(int) >= mask || VM_POINTER(arg[3]) < offset)
|
||||
|
@ -1130,24 +1128,30 @@ static qintptr_t UI_SystemCalls(void *offset, quintptr_t mask, qintptr_t fn, con
|
|||
Master_CheckPollSockets();
|
||||
if (VM_LONG(arg[0])>= 0 && VM_LONG(arg[0]) < MAX_PINGREQUESTS)
|
||||
{
|
||||
int i = VM_LONG(arg[0]);
|
||||
char *buf = VM_POINTER(arg[1]);
|
||||
size_t bufsize = VM_LONG(arg[2]);
|
||||
char *adr;
|
||||
serverinfo_t *info = Master_InfoForServer(&ui_pings[VM_LONG(arg[0])]);
|
||||
if (info && info->ping != 0xffff)
|
||||
serverinfo_t *info = Master_InfoForServer(&ui_pings[i].adr);
|
||||
if (info && (info->status & SRVSTATUS_ALIVE) && info->moreinfo)
|
||||
{
|
||||
adr = info->moreinfo->info;
|
||||
if (!adr)
|
||||
adr = "";
|
||||
if (strlen(adr) < VM_LONG(arg[2]))
|
||||
if (strlen(adr) < bufsize)
|
||||
{
|
||||
strcpy(buf, adr);
|
||||
if (!*Info_ValueForKey(buf, "mapname"))
|
||||
{
|
||||
Info_SetValueForKey(buf, "mapname", Info_ValueForKey(buf, "map"), VM_LONG(arg[2]));
|
||||
Info_RemoveKey(buf, "map");
|
||||
}
|
||||
Info_SetValueForKey(buf, "sv_maxclients", va("%i", info->maxplayers), VM_LONG(arg[2]));
|
||||
Info_SetValueForKey(buf, "clients", va("%i", info->players), VM_LONG(arg[2]));
|
||||
Info_SetValueForKey(buf, "mapname", info->map, bufsize);
|
||||
Info_SetValueForKey(buf, "hostname", info->name, bufsize);
|
||||
Info_SetValueForKey(buf, "g_humanplayers", va("%i", info->numhumans), bufsize);
|
||||
Info_SetValueForKey(buf, "sv_maxclients", va("%i", info->maxplayers), bufsize);
|
||||
Info_SetValueForKey(buf, "clients", va("%i", info->players), bufsize);
|
||||
if (info->adr.type == NA_IPV6 && info->adr.prot == NP_DGRAM)
|
||||
Info_SetValueForKey(buf, "nettype", "2", bufsize);
|
||||
else if (info->adr.type == NA_IP && info->adr.prot == NP_DGRAM)
|
||||
Info_SetValueForKey(buf, "nettype", "1", bufsize);
|
||||
else
|
||||
Info_SetValueForKey(buf, "nettype", "", bufsize);
|
||||
VM_LONG(ret) = true;
|
||||
}
|
||||
}
|
||||
|
@ -1633,7 +1637,7 @@ void UI_Start (void)
|
|||
UI_Stop();
|
||||
|
||||
for (i = 0; i < MAX_PINGREQUESTS; i++)
|
||||
ui_pings[i].type = NA_INVALID;
|
||||
ui_pings[i].adr.type = NA_INVALID;
|
||||
|
||||
ui_width = vid.width;
|
||||
ui_height = vid.height;
|
||||
|
@ -1692,6 +1696,13 @@ qboolean UI_Command(void)
|
|||
return false;
|
||||
}
|
||||
|
||||
qboolean UI_IsRunning(void)
|
||||
{
|
||||
if (uivm)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void UI_Init (void)
|
||||
{
|
||||
Cmd_AddCommand("ui_restart", UI_Restart_f);
|
||||
|
|
|
@ -3003,6 +3003,8 @@ qboolean Image_WriteKTXFile(const char *filename, enum fs_relative fsroot, struc
|
|||
case PTI_L8A8_SRGB: header.glinternalformat = 0x8C45/*GL_SLUMINANCE8_ALPHA8*/; header.glbaseinternalformat = 0x190A/*GL_LUMINANCE_ALPHA*/; header.glformat = 0x190A/*GL_LUMINANCE_ALPHA*/; header.gltype = 0x1401/*GL_UNSIGNED_BYTE*/; header.gltypesize = 1; break;
|
||||
case PTI_RGB8: header.glinternalformat = 0x8051/*GL_RGB8*/; header.glbaseinternalformat = 0x1907/*GL_RGB*/; header.glformat = 0x1907/*GL_RGB*/; header.gltype = 0x1401/*GL_UNSIGNED_BYTE*/; header.gltypesize = 1; break;
|
||||
case PTI_BGR8: header.glinternalformat = 0x8051/*GL_RGB8*/; header.glbaseinternalformat = 0x1907/*GL_RGB*/; header.glformat = 0x80E0/*GL_BGR*/; header.gltype = 0x1401/*GL_UNSIGNED_BYTE*/; header.gltypesize = 1; break;
|
||||
case PTI_R16F: header.glinternalformat = 0x822D/*GL_R16F*/; header.glbaseinternalformat = 0x1903/*GL_RED*/; header.glformat = 0x1903/*GL_RED*/; header.gltype = 0x140B/*GL_HALF_FLOAT*/; header.gltypesize = 2; break;
|
||||
case PTI_R32F: header.glinternalformat = 0x822E/*GL_R32F*/; header.glbaseinternalformat = 0x1903/*GL_RED*/; header.glformat = 0x1903/*GL_RED*/; header.gltype = 0x1406/*GL_FLOAT*/; header.gltypesize = 4; break;
|
||||
case PTI_RGBA16F: header.glinternalformat = 0x881A/*GL_RGBA16F*/; header.glbaseinternalformat = 0x1908/*GL_RGBA*/; header.glformat = 0x1908/*GL_RGBA*/; header.gltype = 0x140B/*GL_HALF_FLOAT*/; header.gltypesize = 2; break;
|
||||
case PTI_RGBA32F: header.glinternalformat = 0x8814/*GL_RGBA32F*/; header.glbaseinternalformat = 0x1908/*GL_RGBA*/; header.glformat = 0x1908/*GL_RGBA*/; header.gltype = 0x1406/*GL_FLOAT*/; header.gltypesize = 4; break;
|
||||
case PTI_A2BGR10: header.glinternalformat = 0x8059/*GL_RGB10_A2*/; header.glbaseinternalformat = 0x1908/*GL_RGBA*/; header.glformat = 0x1908/*GL_RGBA*/; header.gltype = 0x8368/*GL_UNSIGNED_INT_2_10_10_10_REV*/; header.gltypesize = 4; break;
|
||||
|
@ -3174,6 +3176,8 @@ static struct pendingtextureinfo *Image_ReadKTXFile(unsigned int flags, const ch
|
|||
case 0x81A6/*GL_DEPTH_COMPONENT24*/: encoding = PTI_DEPTH24; break;
|
||||
case 0x81A7/*GL_DEPTH_COMPONENT32*/: encoding = PTI_DEPTH32; break;
|
||||
case 0x88F0/*GL_DEPTH24_STENCIL8*/: encoding = PTI_DEPTH24_8; break;
|
||||
case 0x822D/*GL_R16F*/: encoding = PTI_R16F; break;
|
||||
case 0x822E/*GL_R32F*/: encoding = PTI_R32F; break;
|
||||
|
||||
case 0x8C40/*GL_SRGB*/:
|
||||
case 0x8C41/*GL_SRGB8*/:
|
||||
|
@ -3790,6 +3794,8 @@ qboolean Image_WriteDDSFile(const char *filename, enum fs_relative fsroot, struc
|
|||
case PTI_L8A8_SRGB: return false; //unsupported
|
||||
case PTI_RGB8: return false; //unsupported
|
||||
case PTI_BGR8: return false; //unsupported
|
||||
case PTI_R16F: h10.dxgiformat = 54/*DXGI_FORMAT_R16_FLOAT*/; break;
|
||||
case PTI_R32F: h10.dxgiformat = 41/*DXGI_FORMAT_R32_FLOAT*/; break;
|
||||
case PTI_RGBA16F: h10.dxgiformat = 10/*DXGI_FORMAT_R16G16B16A16_FLOAT*/; break;
|
||||
case PTI_RGBA32F: h10.dxgiformat = 2/*DXGI_FORMAT_R32G32B32A32_FLOAT*/; break;
|
||||
case PTI_A2BGR10: h10.dxgiformat = 24/*DXGI_FORMAT_R10G10B10A2_UNORM*/; break;
|
||||
|
@ -5714,6 +5720,12 @@ void Image_BlockSizeForEncoding(uploadfmt_t encoding, unsigned int *blockbytes,
|
|||
b = 4;
|
||||
break;
|
||||
|
||||
case PTI_R16F:
|
||||
b = 1*2;
|
||||
break;
|
||||
case PTI_R32F:
|
||||
b = 1*4;
|
||||
break;
|
||||
case PTI_RGBA16F:
|
||||
b = 4*2;
|
||||
break;
|
||||
|
@ -5851,6 +5863,8 @@ const char *Image_FormatName(uploadfmt_t fmt)
|
|||
case PTI_BGRX8_SRGB: return "RGBX8_SRGB";
|
||||
case PTI_A2BGR10: return "A2BGR10";
|
||||
case PTI_E5BGR9: return "E5BGR9";
|
||||
case PTI_R16F: return "R16F";
|
||||
case PTI_R32F: return "R32F";
|
||||
case PTI_RGBA16F: return "RGBA16F";
|
||||
case PTI_RGBA32F: return "RGBA32F";
|
||||
case PTI_R8: return "R8";
|
||||
|
@ -6867,6 +6881,8 @@ static qboolean Image_GenMip0(struct pendingtextureinfo *mips, unsigned int flag
|
|||
case PTI_EAC_R11_SNORM:
|
||||
case PTI_EAC_RG11:
|
||||
case PTI_EAC_RG11_SNORM:
|
||||
case PTI_R16F:
|
||||
case PTI_R32F:
|
||||
break; //already no alpha in these formats
|
||||
case PTI_DEPTH16:
|
||||
case PTI_DEPTH24:
|
||||
|
|
|
@ -377,6 +377,7 @@ typedef struct texnums_s {
|
|||
texid_t fullbright;
|
||||
texid_t reflectcube;
|
||||
texid_t reflectmask;
|
||||
texid_t displacement;
|
||||
|
||||
//the material's pushconstants. vulkan guarentees only 128 bytes. so 8 vec4s. note that lmscales should want 4 of them...
|
||||
/*struct
|
||||
|
|
|
@ -210,17 +210,8 @@ qboolean Net_AddressIsMaster(netadr_t *adr)
|
|||
}
|
||||
return false;
|
||||
}
|
||||
void Net_Master_Init(void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; net_masterlist[i].cv.name; i++)
|
||||
Cvar_Register(&net_masterlist[i].cv, "master servers");
|
||||
#ifndef CLIENTONLY
|
||||
Cmd_AddCommand ("setmaster", SV_SetMaster_f);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef CLIENTONLY
|
||||
#ifdef HAVE_SERVER
|
||||
|
||||
static void QDECL Net_Masterlist_Callback(struct cvar_s *var, char *oldvalue)
|
||||
{
|
||||
|
@ -2552,7 +2543,7 @@ void MasterInfo_Request(master_t *mast)
|
|||
case MP_QUAKE3:
|
||||
{
|
||||
char *str;
|
||||
str = va("%c%c%c%cgetservers %u empty full\x0A\n", 255, 255, 255, 255, 68);
|
||||
str = va("%c%c%c%cgetservers %u empty full\n", 255, 255, 255, 255, 68);
|
||||
NET_SendPollPacket (strlen(str), str, mast->adr);
|
||||
}
|
||||
break;
|
||||
|
@ -3575,9 +3566,66 @@ void CL_Connect_c(int argn, const char *partial, struct xcommandargcompletioncb_
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
void CL_Connect_c(int argn, const char *partial, struct xcommandargcompletioncb_s *ctx)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef Q3CLIENT
|
||||
static void NetQ3_LocalServers_f(void)
|
||||
{
|
||||
netadr_t na;
|
||||
MasterInfo_Refresh(true);
|
||||
|
||||
if (NET_StringToAdr("255.255.255.255", PORT_Q3SERVER, &na))
|
||||
NET_SendPollPacket (14, va("%c%c%c%cgetstatus\n", 255, 255, 255, 255), na);
|
||||
}
|
||||
static void NetQ3_GlobalServers_f(void)
|
||||
{
|
||||
size_t masternum = atoi(Cmd_Argv(1));
|
||||
int protocol = atoi(Cmd_Argv(2));
|
||||
char *keywords;
|
||||
size_t i;
|
||||
MasterInfo_Refresh(true);
|
||||
|
||||
Cmd_ShiftArgs(2, false);
|
||||
keywords = Cmd_Args();
|
||||
|
||||
if (!masternum)
|
||||
{
|
||||
for (i = 0; i < countof(net_masterlist); i++)
|
||||
Cbuf_AddText(va("globalservers %u %i %s\n", (unsigned)(i+1), protocol, keywords), Cmd_ExecLevel);
|
||||
}
|
||||
masternum--;
|
||||
if (masternum >= countof(net_masterlist))
|
||||
return; //erk
|
||||
if (net_masterlist[masternum].protocol == MP_QUAKE3)
|
||||
{
|
||||
netadr_t adr[16];
|
||||
char *str;
|
||||
size_t n;
|
||||
COM_Parse(net_masterlist[masternum].cv.string); //only want the first one
|
||||
n = NET_StringToAdr2(com_token, 0, adr, countof(adr));
|
||||
str = va("%c%c%c%cgetservers %u empty full\n", 255, 255, 255, 255, 68);
|
||||
for (i = 0; i < n; i++)
|
||||
NET_SendPollPacket (strlen(str), str, adr[i]);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
void Net_Master_Init(void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; net_masterlist[i].cv.name; i++)
|
||||
Cvar_Register(&net_masterlist[i].cv, "master servers");
|
||||
#ifdef HAVE_SERVER
|
||||
Cmd_AddCommand ("setmaster", SV_SetMaster_f);
|
||||
#endif
|
||||
|
||||
#ifdef Q3CLIENT
|
||||
Cmd_AddCommand ("localservers", NetQ3_LocalServers_f);
|
||||
Cmd_AddCommand ("globalservers", NetQ3_GlobalServers_f);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -5577,7 +5577,13 @@ static void P_ParticleTrailSpawn (vec3_t startpos, vec3_t end, part_type_t *ptyp
|
|||
step = ptype->countspacing; //particles per qu
|
||||
step /= r_part_density.value; //scaled...
|
||||
|
||||
//FIXME: countextra
|
||||
if (ptype->countextra)
|
||||
{
|
||||
count = ptype->countextra;
|
||||
if (step>0)
|
||||
count += len/step;
|
||||
step = len/count;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -5660,9 +5666,6 @@ static void P_ParticleTrailSpawn (vec3_t startpos, vec3_t end, part_type_t *ptyp
|
|||
}
|
||||
// count += ptype->countextra;
|
||||
|
||||
if (count > 1000)
|
||||
count = 1000;
|
||||
|
||||
while (count-->0)//len < stop)
|
||||
{
|
||||
len += step;
|
||||
|
|
|
@ -85,6 +85,7 @@ enum fs_relative;
|
|||
|
||||
typedef enum uploadfmt
|
||||
{
|
||||
//NOTE: these values are exposed to native plugins but not QC.
|
||||
PTI_INVALID,
|
||||
|
||||
//these formats are specified as direct byte access (listed in byte order, aka big-endian 0xrrggbbaa order)
|
||||
|
@ -108,6 +109,8 @@ typedef enum uploadfmt
|
|||
PTI_R8_SNORM,
|
||||
PTI_RG8_SNORM, //might be useful for normalmaps
|
||||
//floating point formats
|
||||
PTI_R16F,
|
||||
PTI_R32F,
|
||||
PTI_RGBA16F,
|
||||
PTI_RGBA32F,
|
||||
//packed/misaligned formats: these are specified in native endian order (high bits listed first because that's how things are represented in hex), so may need byte swapping...
|
||||
|
|
|
@ -19,10 +19,9 @@ We also have no doppler with WebAudio.
|
|||
qboolean firefoxstaticsounds; //FireFox bugs out with static sounds. they all end up full volume AND THIS IS REALLY LOUD AND REALLY ANNOYING.
|
||||
#else
|
||||
#define SDRVNAME "OpenAL"
|
||||
// #define USEEFX
|
||||
#endif
|
||||
|
||||
#define USEEFX
|
||||
|
||||
#ifdef OPENAL_STATIC
|
||||
#include <AL/al.h> //output
|
||||
#include <AL/alc.h> //context+input
|
||||
|
@ -296,7 +295,9 @@ extern sfx_t *known_sfx;
|
|||
extern int loaded_sfx;
|
||||
extern int num_sfx;
|
||||
|
||||
#ifdef USEEFX
|
||||
static ALuint OpenAL_LoadEffect(const struct reverbproperties_s *reverb);
|
||||
#endif
|
||||
static void OpenAL_Shutdown (soundcardinfo_t *sc);
|
||||
static void QDECL OnChangeALSettings (cvar_t *var, char *value);
|
||||
/*
|
||||
|
@ -1179,6 +1180,7 @@ static unsigned int OpenAL_GetDMAPos (soundcardinfo_t *sc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef USEEFX
|
||||
static void OpenAL_SetReverb (soundcardinfo_t *sc, size_t reverbeffect)
|
||||
{
|
||||
#ifdef USEEFX
|
||||
|
@ -1222,6 +1224,7 @@ static void OpenAL_SetReverb (soundcardinfo_t *sc, size_t reverbeffect)
|
|||
//Con_Printf("OpenAL: SetUnderWater %i\n", underwater);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
static void OpenAL_Shutdown (soundcardinfo_t *sc)
|
||||
{
|
||||
|
@ -1262,6 +1265,7 @@ static void OpenAL_Shutdown (soundcardinfo_t *sc)
|
|||
Z_Free(oali);
|
||||
}
|
||||
|
||||
#ifdef USEEFX
|
||||
static ALuint OpenAL_LoadEffect(const struct reverbproperties_s *reverb)
|
||||
{
|
||||
ALuint effect = 0;
|
||||
|
@ -1323,6 +1327,7 @@ static ALuint OpenAL_LoadEffect(const struct reverbproperties_s *reverb)
|
|||
}
|
||||
return effect;
|
||||
}
|
||||
#endif
|
||||
|
||||
static qboolean QDECL OpenAL_InitCard(soundcardinfo_t *sc, const char *devname)
|
||||
{
|
||||
|
|
|
@ -1340,6 +1340,8 @@ qboolean Cvar_Command (int level)
|
|||
return true;
|
||||
}
|
||||
|
||||
olev = Cmd_ExecLevel;
|
||||
Cmd_ExecLevel = level;
|
||||
#ifdef HAVE_CLIENT
|
||||
if (v->flags & CVAR_USERINFO)
|
||||
{
|
||||
|
@ -1354,6 +1356,7 @@ qboolean Cvar_Command (int level)
|
|||
}
|
||||
else
|
||||
CL_SetInfo(seat, v->name, str);
|
||||
Cmd_ExecLevel = olev;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1370,6 +1373,7 @@ qboolean Cvar_Command (int level)
|
|||
else
|
||||
{
|
||||
Cvar_LockFromServer(v, str);
|
||||
Cmd_ExecLevel = olev;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -1380,12 +1384,12 @@ qboolean Cvar_Command (int level)
|
|||
if (v->defaultstr && strcmp(v->defaultstr, str))
|
||||
{ //lock the cvar, unless it's going to it's default value.
|
||||
Cvar_LockFromServer(v, str);
|
||||
Cmd_ExecLevel = olev;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
olev = Cmd_ExecLevel;
|
||||
Cmd_ExecLevel = 0;//just to try to detect any bugs that could happen from this
|
||||
Cvar_Set (v, str); //will use all, quote included
|
||||
Cmd_ExecLevel = olev;
|
||||
|
|
|
@ -3319,7 +3319,10 @@ neterr_t FTENET_Datagram_SendPacket(ftenet_generic_connection_t *con, int length
|
|||
size = NetadrToSockadr (to, &addr);
|
||||
}
|
||||
|
||||
ret = sendto (con->thesocket, data, length, 0, (struct sockaddr*)&addr, size );
|
||||
if (!data)
|
||||
ret = 0; //don't send a runt, but pretend we did... yes, this'll confuse EnsureRoute, but at least it'll ensure there's a udp socket open, somewhere.
|
||||
else
|
||||
ret = sendto (con->thesocket, data, length, 0, (struct sockaddr*)&addr, size );
|
||||
if (ret == -1)
|
||||
{
|
||||
const char *prot;
|
||||
|
|
|
@ -59,6 +59,7 @@ int VMQ3_StringToHandle(char *str);
|
|||
void VMQ3_FlushStringHandles(void);
|
||||
|
||||
#ifdef VM_UI
|
||||
qboolean UI_IsRunning(void);
|
||||
qboolean UI_Command(void);
|
||||
void UI_Init (void);
|
||||
void UI_Start (void);
|
||||
|
|
|
@ -826,6 +826,7 @@ static shader_t *GL_ChooseSkin(galiasinfo_t *inf, model_t *model, int surfnum, e
|
|||
cm->texnum.paletted = r_nulltex;
|
||||
cm->texnum.reflectcube = r_nulltex;
|
||||
cm->texnum.reflectmask = r_nulltex;
|
||||
cm->texnum.displacement = r_nulltex;
|
||||
return shader;
|
||||
}
|
||||
}
|
||||
|
@ -1027,6 +1028,7 @@ static shader_t *GL_ChooseSkin(galiasinfo_t *inf, model_t *model, int surfnum, e
|
|||
cm->texnum.reflectcube = shader->defaulttextures->reflectcube;
|
||||
cm->texnum.reflectmask = shader->defaulttextures->reflectmask;
|
||||
cm->texnum.paletted = shader->defaulttextures->paletted;
|
||||
cm->texnum.displacement = shader->defaulttextures->displacement;
|
||||
|
||||
#ifdef HEXEN2 //too lazy to do this
|
||||
if (h2playertranslations && pc)
|
||||
|
@ -2526,9 +2528,9 @@ static void R_Sprite_GenerateTrisoup(entity_t *e, int bemode)
|
|||
VectorMA(sprorigin, e->origin[0], r_refdef.playerview->vw_axis[0], sprorigin);
|
||||
VectorMA(sprorigin, e->origin[1], r_refdef.playerview->vw_axis[1], sprorigin);
|
||||
VectorMA(sprorigin, e->origin[2], r_refdef.playerview->vw_axis[2], sprorigin);
|
||||
VectorMA(sprorigin, 12, vpn, sprorigin);
|
||||
// VectorMA(sprorigin, 12, vpn, sprorigin);
|
||||
|
||||
batchflags |= BEF_FORCENODEPTH;
|
||||
// batchflags |= BEF_FORCENODEPTH;
|
||||
}
|
||||
else
|
||||
VectorCopy(e->origin, sprorigin);
|
||||
|
|
|
@ -1274,6 +1274,12 @@ static void Shader_BindTextureForPass(int tmu, const shaderpass_t *pass)
|
|||
else
|
||||
t = r_whiteimage;
|
||||
break;
|
||||
case T_GEN_DISPLACEMENT:
|
||||
if (shaderstate.curtexnums && TEXLOADED(shaderstate.curtexnums->displacement))
|
||||
t = shaderstate.curtexnums->displacement;
|
||||
else
|
||||
t = r_whiteimage;
|
||||
break;
|
||||
case T_GEN_SHADOWMAP:
|
||||
t = shaderstate.curshadowmap;
|
||||
break;
|
||||
|
|
|
@ -146,7 +146,7 @@ void GL_SetupFormats(void)
|
|||
// glfmtc(PTI_RGBA4444,GL_RGBA, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, tc_rgba8);
|
||||
// glfmtc(PTI_RGBA5551,GL_RGBA, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, tc_rgba1);
|
||||
}
|
||||
if (GL_CheckExtension("GL_OES_texture_half_float"))
|
||||
if (GL_CheckExtension("GL_OES_texture_half_float"))
|
||||
glfmtc(PTI_RGBA16F, GL_RGBA, GL_RGBA, GL_RGBA, GL_HALF_FLOAT_OES, 0); //not to be confused with GL_HALF_FLOAT[_ARB] which has a different value
|
||||
if (GL_CheckExtension("GL_OES_texture_float"))
|
||||
glfmtc(PTI_RGBA32F, GL_RGBA, GL_RGBA, GL_RGBA, GL_FLOAT, 0);
|
||||
|
@ -229,8 +229,11 @@ void GL_SetupFormats(void)
|
|||
|
||||
if (ver >= 3.0)
|
||||
{
|
||||
glfmtc(PTI_RGBA16F, GL_RGBA16F_ARB, GL_RGBA, GL_RGBA, GL_HALF_FLOAT, 0);
|
||||
glfmtc(PTI_RGBA32F, GL_RGBA32F_ARB, GL_RGBA, GL_RGBA, GL_FLOAT, 0);
|
||||
glfmtc(PTI_R16F, GL_R16F, GL_RED, GL_RED, GL_HALF_FLOAT, 0);
|
||||
glfmtc(PTI_R32F, GL_R32F, GL_RED, GL_RED, GL_FLOAT, 0);
|
||||
|
||||
glfmtc(PTI_RGBA16F, GL_RGBA16F_ARB, GL_RGBA, GL_RGBA, GL_HALF_FLOAT, 0);
|
||||
glfmtc(PTI_RGBA32F, GL_RGBA32F_ARB, GL_RGBA, GL_RGBA, GL_FLOAT, 0);
|
||||
}
|
||||
if (ver >= 1.2 && !gl_config_gles)
|
||||
{
|
||||
|
|
|
@ -1156,15 +1156,16 @@ const struct sh_defaultsamplers_s sh_defaultsamplers[] =
|
|||
{"s_paletted", 1u<<8},
|
||||
{"s_reflectcube", 1u<<9},
|
||||
{"s_reflectmask", 1u<<10},
|
||||
{"s_lightmap", 1u<<11},
|
||||
{"s_deluxemap", 1u<<12},
|
||||
{"s_displacement", 1u<<11},
|
||||
{"s_lightmap", 1u<<12},
|
||||
{"s_deluxemap", 1u<<13},
|
||||
#if MAXRLIGHTMAPS > 1
|
||||
{"s_lightmap1", 1u<<13},
|
||||
{"s_lightmap2", 1u<<14},
|
||||
{"s_lightmap3", 1u<<15},
|
||||
{"s_deluxemap1", 1u<<16},
|
||||
{"s_deluxemap2", 1u<<17},
|
||||
{"s_deluxemap3", 1u<<18},
|
||||
{"s_lightmap1", 1u<<14},
|
||||
{"s_lightmap2", 1u<<15},
|
||||
{"s_lightmap3", 1u<<16},
|
||||
{"s_deluxemap1", 1u<<17},
|
||||
{"s_deluxemap2", 1u<<18},
|
||||
{"s_deluxemap3", 1u<<19},
|
||||
#else
|
||||
{"s_lightmap1", 0},
|
||||
{"s_lightmap2", 0},
|
||||
|
@ -2177,6 +2178,12 @@ static void Shader_LowerMap(shader_t *shader, shaderpass_t *pass, char **ptr)
|
|||
unsigned int flags = Shader_SetImageFlags (shader, NULL, &token);
|
||||
shader->defaulttextures->loweroverlay = Shader_FindImage(token, flags);
|
||||
}
|
||||
static void Shader_DisplacementMap(shader_t *shader, shaderpass_t *pass, char **ptr)
|
||||
{
|
||||
char *token = Shader_ParseString(ptr);
|
||||
unsigned int flags = Shader_SetImageFlags (shader, NULL, &token);
|
||||
shader->defaulttextures->displacement = Shader_FindImage(token, flags|IF_NOSRGB);
|
||||
}
|
||||
|
||||
static void Shaderpass_QF_Material(shader_t *shader, shaderpass_t *pass, char **ptr)
|
||||
{
|
||||
|
@ -2430,6 +2437,7 @@ static shaderkey_t shaderkeys[] =
|
|||
{"uppermap", Shader_UpperMap, "fte"},
|
||||
{"lowermap", Shader_LowerMap, "fte"},
|
||||
{"reflectmask", Shader_ReflectMask, "fte"},
|
||||
{"displacementmap", Shader_DisplacementMap, "fte"},
|
||||
|
||||
{"portalfboscale", Shader_PortalFBOScale, "fte"}, //portal/mirror/refraction/reflection FBOs are resized by this scale
|
||||
{"basefactor", NULL, "fte"}, //material scalers for glsl
|
||||
|
@ -2581,6 +2589,11 @@ static qboolean Shaderpass_MapGen (shader_t *shader, shaderpass_t *pass, char *t
|
|||
{
|
||||
pass->texgen = T_GEN_REFLECTMASK;
|
||||
}
|
||||
else if (!Q_stricmp (tname, "$displacement"))
|
||||
{
|
||||
shader->flags |= SHADER_HASDISPLACEMENT;
|
||||
pass->texgen = T_GEN_DISPLACEMENT;
|
||||
}
|
||||
else if (!Q_stricmp (tname, "$shadowmap"))
|
||||
{
|
||||
pass->texgen = T_GEN_SHADOWMAP;
|
||||
|
@ -4043,19 +4056,20 @@ void Shader_FixupProgPasses(shader_t *shader, shaderpass_t *pass)
|
|||
} defaulttgen[] =
|
||||
{
|
||||
//light
|
||||
{T_GEN_SHADOWMAP, 0}, //1
|
||||
{T_GEN_LIGHTCUBEMAP, 0}, //2
|
||||
{T_GEN_SHADOWMAP, 0}, //0
|
||||
{T_GEN_LIGHTCUBEMAP, 0}, //1
|
||||
|
||||
//material
|
||||
{T_GEN_DIFFUSE, SHADER_HASDIFFUSE}, //3
|
||||
{T_GEN_NORMALMAP, SHADER_HASNORMALMAP}, //4
|
||||
{T_GEN_SPECULAR, SHADER_HASGLOSS}, //5
|
||||
{T_GEN_UPPEROVERLAY, SHADER_HASTOPBOTTOM}, //6
|
||||
{T_GEN_LOWEROVERLAY, SHADER_HASTOPBOTTOM}, //7
|
||||
{T_GEN_FULLBRIGHT, SHADER_HASFULLBRIGHT}, //8
|
||||
{T_GEN_PALETTED, SHADER_HASPALETTED}, //9
|
||||
{T_GEN_REFLECTCUBE, 0}, //10
|
||||
{T_GEN_REFLECTMASK, 0}, //11
|
||||
{T_GEN_DIFFUSE, SHADER_HASDIFFUSE}, //2
|
||||
{T_GEN_NORMALMAP, SHADER_HASNORMALMAP}, //3
|
||||
{T_GEN_SPECULAR, SHADER_HASGLOSS}, //4
|
||||
{T_GEN_UPPEROVERLAY, SHADER_HASTOPBOTTOM}, //5
|
||||
{T_GEN_LOWEROVERLAY, SHADER_HASTOPBOTTOM}, //6
|
||||
{T_GEN_FULLBRIGHT, SHADER_HASFULLBRIGHT}, //7
|
||||
{T_GEN_PALETTED, SHADER_HASPALETTED}, //8
|
||||
{T_GEN_REFLECTCUBE, 0}, //9
|
||||
{T_GEN_REFLECTMASK, 0}, //10
|
||||
{T_GEN_DISPLACEMENT, SHADER_HASDISPLACEMENT},//11
|
||||
// {T_GEN_REFLECTION, SHADER_HASREFLECT}, //
|
||||
// {T_GEN_REFRACTION, SHADER_HASREFRACT}, //
|
||||
// {T_GEN_REFRACTIONDEPTH, SHADER_HASREFRACTDEPTH},//
|
||||
|
@ -5156,19 +5170,20 @@ done:;
|
|||
} defaulttgen[] =
|
||||
{
|
||||
//light
|
||||
{T_GEN_SHADOWMAP, 0}, //1
|
||||
{T_GEN_LIGHTCUBEMAP, 0}, //2
|
||||
{T_GEN_SHADOWMAP, 0}, //0
|
||||
{T_GEN_LIGHTCUBEMAP, 0}, //1
|
||||
|
||||
//material
|
||||
{T_GEN_DIFFUSE, SHADER_HASDIFFUSE}, //3
|
||||
{T_GEN_NORMALMAP, SHADER_HASNORMALMAP}, //4
|
||||
{T_GEN_SPECULAR, SHADER_HASGLOSS}, //5
|
||||
{T_GEN_UPPEROVERLAY, SHADER_HASTOPBOTTOM}, //6
|
||||
{T_GEN_LOWEROVERLAY, SHADER_HASTOPBOTTOM}, //7
|
||||
{T_GEN_FULLBRIGHT, SHADER_HASFULLBRIGHT}, //8
|
||||
{T_GEN_PALETTED, SHADER_HASPALETTED}, //9
|
||||
{T_GEN_REFLECTCUBE, 0}, //10
|
||||
{T_GEN_REFLECTMASK, 0}, //11
|
||||
{T_GEN_DIFFUSE, SHADER_HASDIFFUSE}, //2
|
||||
{T_GEN_NORMALMAP, SHADER_HASNORMALMAP}, //3
|
||||
{T_GEN_SPECULAR, SHADER_HASGLOSS}, //4
|
||||
{T_GEN_UPPEROVERLAY, SHADER_HASTOPBOTTOM}, //5
|
||||
{T_GEN_LOWEROVERLAY, SHADER_HASTOPBOTTOM}, //6
|
||||
{T_GEN_FULLBRIGHT, SHADER_HASFULLBRIGHT}, //7
|
||||
{T_GEN_PALETTED, SHADER_HASPALETTED}, //8
|
||||
{T_GEN_REFLECTCUBE, 0}, //9
|
||||
{T_GEN_REFLECTMASK, 0}, //10
|
||||
{T_GEN_DISPLACEMENT, SHADER_HASDISPLACEMENT},//11
|
||||
// {T_GEN_REFLECTION, SHADER_HASREFLECT}, //
|
||||
// {T_GEN_REFRACTION, SHADER_HASREFRACT}, //
|
||||
// {T_GEN_REFRACTIONDEPTH, SHADER_HASREFRACTDEPTH},//
|
||||
|
@ -5376,6 +5391,8 @@ void QDECL R_BuildDefaultTexnums(texnums_t *src, shader_t *shader, unsigned int
|
|||
tex->reflectmask = src->reflectmask;
|
||||
if (!TEXVALID(tex->reflectcube))
|
||||
tex->reflectcube = src->reflectcube;
|
||||
if (!TEXVALID(tex->displacement))
|
||||
tex->displacement = src->displacement;
|
||||
}
|
||||
for (a = 1; a < aframes; a++)
|
||||
{
|
||||
|
@ -5395,6 +5412,8 @@ void QDECL R_BuildDefaultTexnums(texnums_t *src, shader_t *shader, unsigned int
|
|||
tex[a].reflectmask = tex[0].reflectmask;
|
||||
if (!TEXVALID(tex[a].reflectcube))
|
||||
tex[a].reflectcube = tex[0].reflectcube;
|
||||
if (!TEXVALID(tex[a].displacement))
|
||||
tex[a].displacement = tex[0].displacement;
|
||||
}
|
||||
for (a = 0; a < aframes; a++, tex++)
|
||||
{
|
||||
|
@ -5612,6 +5631,8 @@ void QDECL R_BuildLegacyTexnums(shader_t *shader, const char *fallbackname, cons
|
|||
tex[a].reflectmask = tex[0].reflectmask;
|
||||
if (!TEXVALID(tex[a].reflectcube))
|
||||
tex[a].reflectcube = tex[0].reflectcube;
|
||||
if (!TEXVALID(tex[a].displacement))
|
||||
tex[a].displacement = tex[0].displacement;
|
||||
}
|
||||
for (a = 0; a < aframes; a++, tex++)
|
||||
{
|
||||
|
@ -7088,6 +7109,7 @@ static char *Shader_DecomposeSubPass(char *o, shaderpass_t *p, qboolean simple)
|
|||
case T_GEN_PALETTED: sprintf(o, "paletted "); break;
|
||||
case T_GEN_REFLECTCUBE: sprintf(o, "reflectcube "); break;
|
||||
case T_GEN_REFLECTMASK: sprintf(o, "reflectmask "); break;
|
||||
case T_GEN_DISPLACEMENT: sprintf(o, "displacementmap "); break;
|
||||
case T_GEN_CURRENTRENDER: sprintf(o, "currentrender "); break;
|
||||
case T_GEN_SOURCECOLOUR: sprintf(o, "sourcecolour "); break;
|
||||
case T_GEN_SOURCEDEPTH: sprintf(o, "sourcedepth "); break;
|
||||
|
|
|
@ -2175,6 +2175,7 @@ static GLhandleARB GLSlang_CreateShader (program_t *prog, const char *name, int
|
|||
"uniform sampler2D s_paletted;\n",
|
||||
"uniform samplerCube s_reflectcube;\n",
|
||||
"uniform sampler2D s_reflectmask;\n",
|
||||
"uniform sampler2D s_displacement;\n",
|
||||
"uniform sampler2D s_lightmap;\n#define s_lightmap0 s_lightmap\n",
|
||||
"uniform sampler2D s_deluxemap;\n#define s_deluxemap0 s_deluxemap\n",
|
||||
|
||||
|
|
|
@ -892,9 +892,13 @@ typedef void (APIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void);
|
|||
#define GL_TEXTURE_MAX_LEVEL 0x813d
|
||||
#endif
|
||||
|
||||
#ifndef GL_RGBA16F_ARB
|
||||
#define GL_RGBA16F_ARB 0x881A
|
||||
#define GL_RGBA32F_ARB 0x8814
|
||||
#ifndef GL_RGBA16F
|
||||
#define GL_RGBA16F 0x881A
|
||||
#define GL_RGBA32F 0x8814
|
||||
#endif
|
||||
#ifndef GL_R16F
|
||||
#define GL_R16F 0x822D
|
||||
#define GL_R32F 0x822E
|
||||
#endif
|
||||
|
||||
#ifndef GL_RED
|
||||
|
|
|
@ -2665,6 +2665,282 @@ YOU SHOULD NOT EDIT THIS FILE BY HAND
|
|||
"#endif\n"
|
||||
},
|
||||
#endif
|
||||
#ifdef VKQUAKE
|
||||
{QR_VULKAN, -1, "defaultadditivesprite",
|
||||
"\xFF\x53\x50\x56\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x20\x00\x00\x00\x2C\x00\x00\x00\x20\x00\x00\x00\x4C\x00\x00\x00"
|
||||
"\x7C\x0F\x00\x00\xC8\x0F\x00\x00\x54\x12\x00\x00\x01\x00\x46\x31\x4D\x41\x53\x4B\x00\x00\x00\x00\x00\x01\x01\x62\x31\x72\x5F\x66"
|
||||
"\x6F\x67\x5F\x65\x78\x70\x32\x00\x00\x00\x00\x00\x03\x02\x23\x07\x00\x00\x01\x00\x06\x00\x08\x00\x51\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x11\x00\x02\x00\x01\x00\x00\x00\x0B\x00\x06\x00\x01\x00\x00\x00\x47\x4C\x53\x4C\x2E\x73\x74\x64\x2E\x34\x35\x30\x00\x00\x00\x00"
|
||||
"\x0E\x00\x03\x00\x00\x00\x00\x00\x01\x00\x00\x00\x0F\x00\x0F\x00\x00\x00\x00\x00\x04\x00\x00\x00\x6D\x61\x69\x6E\x00\x00\x00\x00"
|
||||
"\x1C\x00\x00\x00\x39\x00\x00\x00\x3B\x00\x00\x00\x3E\x00\x00\x00\x40\x00\x00\x00\x44\x00\x00\x00\x4D\x00\x00\x00\x4E\x00\x00\x00"
|
||||
"\x4F\x00\x00\x00\x50\x00\x00\x00\x03\x00\x03\x00\x02\x00\x00\x00\xC2\x01\x00\x00\x05\x00\x04\x00\x04\x00\x00\x00\x6D\x61\x69\x6E"
|
||||
"\x00\x00\x00\x00\x05\x00\x06\x00\x09\x00\x00\x00\x66\x74\x65\x74\x72\x61\x6E\x73\x66\x6F\x72\x6D\x28\x00\x00\x00\x05\x00\x04\x00"
|
||||
"\x0C\x00\x00\x00\x70\x72\x6F\x6A\x00\x00\x00\x00\x05\x00\x05\x00\x13\x00\x00\x00\x65\x6E\x74\x69\x74\x79\x62\x6C\x6F\x63\x6B\x00"
|
||||
"\x06\x00\x07\x00\x13\x00\x00\x00\x00\x00\x00\x00\x6D\x5F\x6D\x6F\x64\x65\x6C\x76\x69\x65\x77\x70\x72\x6F\x6A\x00\x06\x00\x05\x00"
|
||||
"\x13\x00\x00\x00\x01\x00\x00\x00\x6D\x5F\x6D\x6F\x64\x65\x6C\x00\x06\x00\x06\x00\x13\x00\x00\x00\x02\x00\x00\x00\x6D\x5F\x6D\x6F"
|
||||
"\x64\x65\x6C\x69\x6E\x76\x00\x00\x06\x00\x06\x00\x13\x00\x00\x00\x03\x00\x00\x00\x65\x5F\x65\x79\x65\x70\x6F\x73\x00\x00\x00\x00"
|
||||
"\x06\x00\x05\x00\x13\x00\x00\x00\x04\x00\x00\x00\x65\x5F\x74\x69\x6D\x65\x00\x00\x06\x00\x07\x00\x13\x00\x00\x00\x05\x00\x00\x00"
|
||||
"\x65\x5F\x6C\x69\x67\x68\x74\x5F\x61\x6D\x62\x69\x65\x6E\x74\x00\x06\x00\x05\x00\x13\x00\x00\x00\x06\x00\x00\x00\x65\x70\x61\x64"
|
||||
"\x31\x00\x00\x00\x06\x00\x06\x00\x13\x00\x00\x00\x07\x00\x00\x00\x65\x5F\x6C\x69\x67\x68\x74\x5F\x64\x69\x72\x00\x06\x00\x05\x00"
|
||||
"\x13\x00\x00\x00\x08\x00\x00\x00\x65\x70\x61\x64\x32\x00\x00\x00\x06\x00\x06\x00\x13\x00\x00\x00\x09\x00\x00\x00\x65\x5F\x6C\x69"
|
||||
"\x67\x68\x74\x5F\x6D\x75\x6C\x00\x06\x00\x05\x00\x13\x00\x00\x00\x0A\x00\x00\x00\x65\x70\x61\x64\x33\x00\x00\x00\x06\x00\x06\x00"
|
||||
"\x13\x00\x00\x00\x0B\x00\x00\x00\x65\x5F\x6C\x6D\x73\x63\x61\x6C\x65\x73\x00\x00\x06\x00\x07\x00\x13\x00\x00\x00\x0C\x00\x00\x00"
|
||||
"\x65\x5F\x75\x70\x70\x65\x72\x63\x6F\x6C\x6F\x75\x72\x00\x00\x00\x06\x00\x05\x00\x13\x00\x00\x00\x0D\x00\x00\x00\x65\x70\x61\x64"
|
||||
"\x34\x00\x00\x00\x06\x00\x07\x00\x13\x00\x00\x00\x0E\x00\x00\x00\x65\x5F\x6C\x6F\x77\x65\x72\x63\x6F\x6C\x6F\x75\x72\x00\x00\x00"
|
||||
"\x06\x00\x05\x00\x13\x00\x00\x00\x0F\x00\x00\x00\x65\x70\x61\x64\x35\x00\x00\x00\x06\x00\x06\x00\x13\x00\x00\x00\x10\x00\x00\x00"
|
||||
"\x65\x5F\x67\x6C\x6F\x77\x6D\x6F\x64\x00\x00\x00\x06\x00\x05\x00\x13\x00\x00\x00\x11\x00\x00\x00\x65\x70\x61\x64\x36\x00\x00\x00"
|
||||
"\x06\x00\x07\x00\x13\x00\x00\x00\x12\x00\x00\x00\x65\x5F\x63\x6F\x6C\x6F\x75\x72\x69\x64\x65\x6E\x74\x00\x00\x00\x06\x00\x07\x00"
|
||||
"\x13\x00\x00\x00\x13\x00\x00\x00\x77\x5F\x66\x6F\x67\x63\x6F\x6C\x6F\x75\x72\x73\x00\x00\x00\x00\x06\x00\x07\x00\x13\x00\x00\x00"
|
||||
"\x14\x00\x00\x00\x77\x5F\x66\x6F\x67\x64\x65\x6E\x73\x69\x74\x79\x00\x00\x00\x00\x06\x00\x07\x00\x13\x00\x00\x00\x15\x00\x00\x00"
|
||||
"\x77\x5F\x66\x6F\x67\x64\x65\x70\x74\x68\x62\x69\x61\x73\x00\x00\x06\x00\x05\x00\x13\x00\x00\x00\x16\x00\x00\x00\x65\x70\x61\x64"
|
||||
"\x37\x00\x00\x00\x05\x00\x03\x00\x15\x00\x00\x00\x00\x00\x00\x00\x05\x00\x05\x00\x1C\x00\x00\x00\x76\x5F\x70\x6F\x73\x69\x74\x69"
|
||||
"\x6F\x6E\x00\x00\x05\x00\x03\x00\x39\x00\x00\x00\x74\x63\x00\x00\x05\x00\x05\x00\x3B\x00\x00\x00\x76\x5F\x74\x65\x78\x63\x6F\x6F"
|
||||
"\x72\x64\x00\x00\x05\x00\x03\x00\x3E\x00\x00\x00\x76\x63\x00\x00\x05\x00\x05\x00\x40\x00\x00\x00\x76\x5F\x63\x6F\x6C\x6F\x75\x72"
|
||||
"\x00\x00\x00\x00\x05\x00\x06\x00\x42\x00\x00\x00\x67\x6C\x5F\x50\x65\x72\x56\x65\x72\x74\x65\x78\x00\x00\x00\x00\x06\x00\x06\x00"
|
||||
"\x42\x00\x00\x00\x00\x00\x00\x00\x67\x6C\x5F\x50\x6F\x73\x69\x74\x69\x6F\x6E\x00\x05\x00\x03\x00\x44\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x05\x00\x05\x00\x47\x00\x00\x00\x61\x72\x67\x5F\x4D\x41\x53\x4B\x00\x00\x00\x00\x05\x00\x07\x00\x48\x00\x00\x00\x5F\x63\x76\x61"
|
||||
"\x72\x5F\x72\x5F\x66\x6F\x67\x5F\x65\x78\x70\x32\x00\x00\x00\x00\x05\x00\x04\x00\x49\x00\x00\x00\x5F\x46\x4F\x47\x00\x00\x00\x00"
|
||||
"\x05\x00\x05\x00\x4A\x00\x00\x00\x6C\x69\x67\x68\x74\x62\x6C\x6F\x63\x6B\x00\x00\x06\x00\x07\x00\x4A\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x6C\x5F\x63\x75\x62\x65\x6D\x61\x74\x72\x69\x78\x00\x00\x00\x00\x06\x00\x07\x00\x4A\x00\x00\x00\x01\x00\x00\x00\x6C\x5F\x6C\x69"
|
||||
"\x67\x68\x74\x70\x6F\x73\x69\x74\x69\x6F\x6E\x00\x06\x00\x05\x00\x4A\x00\x00\x00\x02\x00\x00\x00\x6C\x70\x61\x64\x31\x00\x00\x00"
|
||||
"\x06\x00\x07\x00\x4A\x00\x00\x00\x03\x00\x00\x00\x6C\x5F\x6C\x69\x67\x68\x74\x63\x6F\x6C\x6F\x75\x72\x00\x00\x00\x06\x00\x05\x00"
|
||||
"\x4A\x00\x00\x00\x04\x00\x00\x00\x6C\x70\x61\x64\x32\x00\x00\x00\x06\x00\x08\x00\x4A\x00\x00\x00\x05\x00\x00\x00\x6C\x5F\x6C\x69"
|
||||
"\x67\x68\x74\x63\x6F\x6C\x6F\x75\x72\x73\x63\x61\x6C\x65\x00\x00\x06\x00\x07\x00\x4A\x00\x00\x00\x06\x00\x00\x00\x6C\x5F\x6C\x69"
|
||||
"\x67\x68\x74\x72\x61\x64\x69\x75\x73\x00\x00\x00\x06\x00\x07\x00\x4A\x00\x00\x00\x07\x00\x00\x00\x6C\x5F\x73\x68\x61\x64\x6F\x77"
|
||||
"\x6D\x61\x70\x70\x72\x6F\x6A\x00\x06\x00\x08\x00\x4A\x00\x00\x00\x08\x00\x00\x00\x6C\x5F\x73\x68\x61\x64\x6F\x77\x6D\x61\x70\x73"
|
||||
"\x63\x61\x6C\x65\x00\x00\x00\x00\x06\x00\x05\x00\x4A\x00\x00\x00\x09\x00\x00\x00\x6C\x70\x61\x64\x33\x00\x00\x00\x05\x00\x03\x00"
|
||||
"\x4C\x00\x00\x00\x00\x00\x00\x00\x05\x00\x05\x00\x4D\x00\x00\x00\x76\x5F\x6C\x6D\x63\x6F\x6F\x72\x64\x00\x00\x00\x05\x00\x05\x00"
|
||||
"\x4E\x00\x00\x00\x76\x5F\x6E\x6F\x72\x6D\x61\x6C\x00\x00\x00\x00\x05\x00\x05\x00\x4F\x00\x00\x00\x76\x5F\x73\x76\x65\x63\x74\x6F"
|
||||
"\x72\x00\x00\x00\x05\x00\x05\x00\x50\x00\x00\x00\x76\x5F\x74\x76\x65\x63\x74\x6F\x72\x00\x00\x00\x47\x00\x04\x00\x11\x00\x00\x00"
|
||||
"\x06\x00\x00\x00\x10\x00\x00\x00\x48\x00\x04\x00\x13\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00"
|
||||
"\x48\x00\x04\x00\x13\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x01\x00\x00\x00\x23\x00\x00\x00"
|
||||
"\x40\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x48\x00\x04\x00\x13\x00\x00\x00"
|
||||
"\x02\x00\x00\x00\x05\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x02\x00\x00\x00\x23\x00\x00\x00\x80\x00\x00\x00\x48\x00\x05\x00"
|
||||
"\x13\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x03\x00\x00\x00\x23\x00\x00\x00"
|
||||
"\xC0\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x04\x00\x00\x00\x23\x00\x00\x00\xCC\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00"
|
||||
"\x05\x00\x00\x00\x23\x00\x00\x00\xD0\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x06\x00\x00\x00\x23\x00\x00\x00\xDC\x00\x00\x00"
|
||||
"\x48\x00\x05\x00\x13\x00\x00\x00\x07\x00\x00\x00\x23\x00\x00\x00\xE0\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x08\x00\x00\x00"
|
||||
"\x23\x00\x00\x00\xEC\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x09\x00\x00\x00\x23\x00\x00\x00\xF0\x00\x00\x00\x48\x00\x05\x00"
|
||||
"\x13\x00\x00\x00\x0A\x00\x00\x00\x23\x00\x00\x00\xFC\x00\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x0B\x00\x00\x00\x23\x00\x00\x00"
|
||||
"\x00\x01\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x0C\x00\x00\x00\x23\x00\x00\x00\x40\x01\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00"
|
||||
"\x0D\x00\x00\x00\x23\x00\x00\x00\x4C\x01\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x0E\x00\x00\x00\x23\x00\x00\x00\x50\x01\x00\x00"
|
||||
"\x48\x00\x05\x00\x13\x00\x00\x00\x0F\x00\x00\x00\x23\x00\x00\x00\x5C\x01\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x10\x00\x00\x00"
|
||||
"\x23\x00\x00\x00\x60\x01\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x11\x00\x00\x00\x23\x00\x00\x00\x6C\x01\x00\x00\x48\x00\x05\x00"
|
||||
"\x13\x00\x00\x00\x12\x00\x00\x00\x23\x00\x00\x00\x70\x01\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x13\x00\x00\x00\x23\x00\x00\x00"
|
||||
"\x80\x01\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x14\x00\x00\x00\x23\x00\x00\x00\x90\x01\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00"
|
||||
"\x15\x00\x00\x00\x23\x00\x00\x00\x94\x01\x00\x00\x48\x00\x05\x00\x13\x00\x00\x00\x16\x00\x00\x00\x23\x00\x00\x00\x98\x01\x00\x00"
|
||||
"\x47\x00\x03\x00\x13\x00\x00\x00\x02\x00\x00\x00\x47\x00\x04\x00\x15\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00"
|
||||
"\x15\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00\x1C\x00\x00\x00\x1E\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00"
|
||||
"\x39\x00\x00\x00\x1E\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00\x3B\x00\x00\x00\x1E\x00\x00\x00\x01\x00\x00\x00\x47\x00\x04\x00"
|
||||
"\x3E\x00\x00\x00\x1E\x00\x00\x00\x01\x00\x00\x00\x47\x00\x04\x00\x40\x00\x00\x00\x1E\x00\x00\x00\x02\x00\x00\x00\x48\x00\x05\x00"
|
||||
"\x42\x00\x00\x00\x00\x00\x00\x00\x0B\x00\x00\x00\x00\x00\x00\x00\x47\x00\x03\x00\x42\x00\x00\x00\x02\x00\x00\x00\x47\x00\x04\x00"
|
||||
"\x47\x00\x00\x00\x01\x00\x00\x00\x00\x01\x00\x00\x47\x00\x04\x00\x48\x00\x00\x00\x01\x00\x00\x00\x01\x01\x00\x00\x47\x00\x04\x00"
|
||||
"\x49\x00\x00\x00\x01\x00\x00\x00\x15\x00\x00\x00\x48\x00\x04\x00\x4A\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x48\x00\x05\x00"
|
||||
"\x4A\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00\x48\x00\x05\x00\x4A\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00"
|
||||
"\x10\x00\x00\x00\x48\x00\x05\x00\x4A\x00\x00\x00\x01\x00\x00\x00\x23\x00\x00\x00\x40\x00\x00\x00\x48\x00\x05\x00\x4A\x00\x00\x00"
|
||||
"\x02\x00\x00\x00\x23\x00\x00\x00\x4C\x00\x00\x00\x48\x00\x05\x00\x4A\x00\x00\x00\x03\x00\x00\x00\x23\x00\x00\x00\x50\x00\x00\x00"
|
||||
"\x48\x00\x05\x00\x4A\x00\x00\x00\x04\x00\x00\x00\x23\x00\x00\x00\x5C\x00\x00\x00\x48\x00\x05\x00\x4A\x00\x00\x00\x05\x00\x00\x00"
|
||||
"\x23\x00\x00\x00\x60\x00\x00\x00\x48\x00\x05\x00\x4A\x00\x00\x00\x06\x00\x00\x00\x23\x00\x00\x00\x6C\x00\x00\x00\x48\x00\x05\x00"
|
||||
"\x4A\x00\x00\x00\x07\x00\x00\x00\x23\x00\x00\x00\x70\x00\x00\x00\x48\x00\x05\x00\x4A\x00\x00\x00\x08\x00\x00\x00\x23\x00\x00\x00"
|
||||
"\x80\x00\x00\x00\x48\x00\x05\x00\x4A\x00\x00\x00\x09\x00\x00\x00\x23\x00\x00\x00\x88\x00\x00\x00\x47\x00\x03\x00\x4A\x00\x00\x00"
|
||||
"\x02\x00\x00\x00\x47\x00\x04\x00\x4C\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00\x4C\x00\x00\x00\x21\x00\x00\x00"
|
||||
"\x01\x00\x00\x00\x47\x00\x04\x00\x4D\x00\x00\x00\x1E\x00\x00\x00\x03\x00\x00\x00\x47\x00\x04\x00\x4E\x00\x00\x00\x1E\x00\x00\x00"
|
||||
"\x04\x00\x00\x00\x47\x00\x04\x00\x4F\x00\x00\x00\x1E\x00\x00\x00\x05\x00\x00\x00\x47\x00\x04\x00\x50\x00\x00\x00\x1E\x00\x00\x00"
|
||||
"\x06\x00\x00\x00\x13\x00\x02\x00\x02\x00\x00\x00\x21\x00\x03\x00\x03\x00\x00\x00\x02\x00\x00\x00\x16\x00\x03\x00\x06\x00\x00\x00"
|
||||
"\x20\x00\x00\x00\x17\x00\x04\x00\x07\x00\x00\x00\x06\x00\x00\x00\x04\x00\x00\x00\x21\x00\x03\x00\x08\x00\x00\x00\x07\x00\x00\x00"
|
||||
"\x20\x00\x04\x00\x0B\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x18\x00\x04\x00\x0D\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00"
|
||||
"\x17\x00\x04\x00\x0E\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x15\x00\x04\x00\x0F\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x2B\x00\x04\x00\x0F\x00\x00\x00\x10\x00\x00\x00\x04\x00\x00\x00\x1C\x00\x04\x00\x11\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00"
|
||||
"\x17\x00\x04\x00\x12\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x1E\x00\x19\x00\x13\x00\x00\x00\x0D\x00\x00\x00\x0D\x00\x00\x00"
|
||||
"\x0D\x00\x00\x00\x0E\x00\x00\x00\x06\x00\x00\x00\x0E\x00\x00\x00\x06\x00\x00\x00\x0E\x00\x00\x00\x06\x00\x00\x00\x0E\x00\x00\x00"
|
||||
"\x06\x00\x00\x00\x11\x00\x00\x00\x0E\x00\x00\x00\x06\x00\x00\x00\x0E\x00\x00\x00\x06\x00\x00\x00\x0E\x00\x00\x00\x06\x00\x00\x00"
|
||||
"\x07\x00\x00\x00\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x12\x00\x00\x00\x20\x00\x04\x00\x14\x00\x00\x00\x02\x00\x00\x00"
|
||||
"\x13\x00\x00\x00\x3B\x00\x04\x00\x14\x00\x00\x00\x15\x00\x00\x00\x02\x00\x00\x00\x15\x00\x04\x00\x16\x00\x00\x00\x20\x00\x00\x00"
|
||||
"\x01\x00\x00\x00\x2B\x00\x04\x00\x16\x00\x00\x00\x17\x00\x00\x00\x00\x00\x00\x00\x20\x00\x04\x00\x18\x00\x00\x00\x02\x00\x00\x00"
|
||||
"\x0D\x00\x00\x00\x20\x00\x04\x00\x1B\x00\x00\x00\x01\x00\x00\x00\x0E\x00\x00\x00\x3B\x00\x04\x00\x1B\x00\x00\x00\x1C\x00\x00\x00"
|
||||
"\x01\x00\x00\x00\x2B\x00\x04\x00\x06\x00\x00\x00\x1E\x00\x00\x00\x00\x00\x80\x3F\x2B\x00\x04\x00\x06\x00\x00\x00\x24\x00\x00\x00"
|
||||
"\x00\x00\x80\xBF\x2B\x00\x04\x00\x0F\x00\x00\x00\x25\x00\x00\x00\x01\x00\x00\x00\x20\x00\x04\x00\x26\x00\x00\x00\x07\x00\x00\x00"
|
||||
"\x06\x00\x00\x00\x2B\x00\x04\x00\x0F\x00\x00\x00\x2B\x00\x00\x00\x02\x00\x00\x00\x2B\x00\x04\x00\x0F\x00\x00\x00\x2E\x00\x00\x00"
|
||||
"\x03\x00\x00\x00\x2B\x00\x04\x00\x06\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x40\x20\x00\x04\x00\x38\x00\x00\x00\x03\x00\x00\x00"
|
||||
"\x12\x00\x00\x00\x3B\x00\x04\x00\x38\x00\x00\x00\x39\x00\x00\x00\x03\x00\x00\x00\x20\x00\x04\x00\x3A\x00\x00\x00\x01\x00\x00\x00"
|
||||
"\x12\x00\x00\x00\x3B\x00\x04\x00\x3A\x00\x00\x00\x3B\x00\x00\x00\x01\x00\x00\x00\x20\x00\x04\x00\x3D\x00\x00\x00\x03\x00\x00\x00"
|
||||
"\x07\x00\x00\x00\x3B\x00\x04\x00\x3D\x00\x00\x00\x3E\x00\x00\x00\x03\x00\x00\x00\x20\x00\x04\x00\x3F\x00\x00\x00\x01\x00\x00\x00"
|
||||
"\x07\x00\x00\x00\x3B\x00\x04\x00\x3F\x00\x00\x00\x40\x00\x00\x00\x01\x00\x00\x00\x1E\x00\x03\x00\x42\x00\x00\x00\x07\x00\x00\x00"
|
||||
"\x20\x00\x04\x00\x43\x00\x00\x00\x03\x00\x00\x00\x42\x00\x00\x00\x3B\x00\x04\x00\x43\x00\x00\x00\x44\x00\x00\x00\x03\x00\x00\x00"
|
||||
"\x32\x00\x04\x00\x06\x00\x00\x00\x47\x00\x00\x00\x00\x00\x80\x43\x32\x00\x04\x00\x16\x00\x00\x00\x48\x00\x00\x00\x01\x01\x00\x00"
|
||||
"\x32\x00\x04\x00\x16\x00\x00\x00\x49\x00\x00\x00\x15\x00\x00\x00\x1E\x00\x0C\x00\x4A\x00\x00\x00\x0D\x00\x00\x00\x0E\x00\x00\x00"
|
||||
"\x06\x00\x00\x00\x0E\x00\x00\x00\x06\x00\x00\x00\x0E\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x12\x00\x00\x00\x12\x00\x00\x00"
|
||||
"\x20\x00\x04\x00\x4B\x00\x00\x00\x02\x00\x00\x00\x4A\x00\x00\x00\x3B\x00\x04\x00\x4B\x00\x00\x00\x4C\x00\x00\x00\x02\x00\x00\x00"
|
||||
"\x3B\x00\x04\x00\x3A\x00\x00\x00\x4D\x00\x00\x00\x01\x00\x00\x00\x3B\x00\x04\x00\x1B\x00\x00\x00\x4E\x00\x00\x00\x01\x00\x00\x00"
|
||||
"\x3B\x00\x04\x00\x1B\x00\x00\x00\x4F\x00\x00\x00\x01\x00\x00\x00\x3B\x00\x04\x00\x1B\x00\x00\x00\x50\x00\x00\x00\x01\x00\x00\x00"
|
||||
"\x36\x00\x05\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\xF8\x00\x02\x00\x05\x00\x00\x00\x3D\x00\x04\x00"
|
||||
"\x12\x00\x00\x00\x3C\x00\x00\x00\x3B\x00\x00\x00\x3E\x00\x03\x00\x39\x00\x00\x00\x3C\x00\x00\x00\x3D\x00\x04\x00\x07\x00\x00\x00"
|
||||
"\x41\x00\x00\x00\x40\x00\x00\x00\x3E\x00\x03\x00\x3E\x00\x00\x00\x41\x00\x00\x00\x39\x00\x04\x00\x07\x00\x00\x00\x45\x00\x00\x00"
|
||||
"\x09\x00\x00\x00\x41\x00\x05\x00\x3D\x00\x00\x00\x46\x00\x00\x00\x44\x00\x00\x00\x17\x00\x00\x00\x3E\x00\x03\x00\x46\x00\x00\x00"
|
||||
"\x45\x00\x00\x00\xFD\x00\x01\x00\x38\x00\x01\x00\x36\x00\x05\x00\x07\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00"
|
||||
"\xF8\x00\x02\x00\x0A\x00\x00\x00\x3B\x00\x04\x00\x0B\x00\x00\x00\x0C\x00\x00\x00\x07\x00\x00\x00\x41\x00\x05\x00\x18\x00\x00\x00"
|
||||
"\x19\x00\x00\x00\x15\x00\x00\x00\x17\x00\x00\x00\x3D\x00\x04\x00\x0D\x00\x00\x00\x1A\x00\x00\x00\x19\x00\x00\x00\x3D\x00\x04\x00"
|
||||
"\x0E\x00\x00\x00\x1D\x00\x00\x00\x1C\x00\x00\x00\x51\x00\x05\x00\x06\x00\x00\x00\x1F\x00\x00\x00\x1D\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x51\x00\x05\x00\x06\x00\x00\x00\x20\x00\x00\x00\x1D\x00\x00\x00\x01\x00\x00\x00\x51\x00\x05\x00\x06\x00\x00\x00\x21\x00\x00\x00"
|
||||
"\x1D\x00\x00\x00\x02\x00\x00\x00\x50\x00\x07\x00\x07\x00\x00\x00\x22\x00\x00\x00\x1F\x00\x00\x00\x20\x00\x00\x00\x21\x00\x00\x00"
|
||||
"\x1E\x00\x00\x00\x91\x00\x05\x00\x07\x00\x00\x00\x23\x00\x00\x00\x1A\x00\x00\x00\x22\x00\x00\x00\x3E\x00\x03\x00\x0C\x00\x00\x00"
|
||||
"\x23\x00\x00\x00\x41\x00\x05\x00\x26\x00\x00\x00\x27\x00\x00\x00\x0C\x00\x00\x00\x25\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00"
|
||||
"\x28\x00\x00\x00\x27\x00\x00\x00\x85\x00\x05\x00\x06\x00\x00\x00\x29\x00\x00\x00\x28\x00\x00\x00\x24\x00\x00\x00\x41\x00\x05\x00"
|
||||
"\x26\x00\x00\x00\x2A\x00\x00\x00\x0C\x00\x00\x00\x25\x00\x00\x00\x3E\x00\x03\x00\x2A\x00\x00\x00\x29\x00\x00\x00\x41\x00\x05\x00"
|
||||
"\x26\x00\x00\x00\x2C\x00\x00\x00\x0C\x00\x00\x00\x2B\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x2D\x00\x00\x00\x2C\x00\x00\x00"
|
||||
"\x41\x00\x05\x00\x26\x00\x00\x00\x2F\x00\x00\x00\x0C\x00\x00\x00\x2E\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x30\x00\x00\x00"
|
||||
"\x2F\x00\x00\x00\x81\x00\x05\x00\x06\x00\x00\x00\x31\x00\x00\x00\x2D\x00\x00\x00\x30\x00\x00\x00\x88\x00\x05\x00\x06\x00\x00\x00"
|
||||
"\x33\x00\x00\x00\x31\x00\x00\x00\x32\x00\x00\x00\x41\x00\x05\x00\x26\x00\x00\x00\x34\x00\x00\x00\x0C\x00\x00\x00\x2B\x00\x00\x00"
|
||||
"\x3E\x00\x03\x00\x34\x00\x00\x00\x33\x00\x00\x00\x3D\x00\x04\x00\x07\x00\x00\x00\x35\x00\x00\x00\x0C\x00\x00\x00\xFE\x00\x02\x00"
|
||||
"\x35\x00\x00\x00\x38\x00\x01\x00\x03\x02\x23\x07\x00\x00\x01\x00\x06\x00\x08\x00\x7D\x00\x00\x00\x00\x00\x00\x00\x11\x00\x02\x00"
|
||||
"\x01\x00\x00\x00\x0B\x00\x06\x00\x01\x00\x00\x00\x47\x4C\x53\x4C\x2E\x73\x74\x64\x2E\x34\x35\x30\x00\x00\x00\x00\x0E\x00\x03\x00"
|
||||
"\x00\x00\x00\x00\x01\x00\x00\x00\x0F\x00\x09\x00\x04\x00\x00\x00\x04\x00\x00\x00\x6D\x61\x69\x6E\x00\x00\x00\x00\x27\x00\x00\x00"
|
||||
"\x5F\x00\x00\x00\x6E\x00\x00\x00\x70\x00\x00\x00\x10\x00\x03\x00\x04\x00\x00\x00\x07\x00\x00\x00\x03\x00\x03\x00\x02\x00\x00\x00"
|
||||
"\xC2\x01\x00\x00\x05\x00\x04\x00\x04\x00\x00\x00\x6D\x61\x69\x6E\x00\x00\x00\x00\x05\x00\x07\x00\x0B\x00\x00\x00\x66\x6F\x67\x34"
|
||||
"\x61\x64\x64\x69\x74\x69\x76\x65\x28\x76\x66\x34\x3B\x00\x00\x00\x05\x00\x06\x00\x0A\x00\x00\x00\x72\x65\x67\x75\x6C\x61\x72\x63"
|
||||
"\x6F\x6C\x6F\x75\x72\x00\x00\x00\x05\x00\x04\x00\x0E\x00\x00\x00\x5F\x46\x4F\x47\x00\x00\x00\x00\x05\x00\x03\x00\x18\x00\x00\x00"
|
||||
"\x7A\x00\x00\x00\x05\x00\x05\x00\x1F\x00\x00\x00\x65\x6E\x74\x69\x74\x79\x62\x6C\x6F\x63\x6B\x00\x06\x00\x07\x00\x1F\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x6D\x5F\x6D\x6F\x64\x65\x6C\x76\x69\x65\x77\x70\x72\x6F\x6A\x00\x06\x00\x05\x00\x1F\x00\x00\x00\x01\x00\x00\x00"
|
||||
"\x6D\x5F\x6D\x6F\x64\x65\x6C\x00\x06\x00\x06\x00\x1F\x00\x00\x00\x02\x00\x00\x00\x6D\x5F\x6D\x6F\x64\x65\x6C\x69\x6E\x76\x00\x00"
|
||||
"\x06\x00\x06\x00\x1F\x00\x00\x00\x03\x00\x00\x00\x65\x5F\x65\x79\x65\x70\x6F\x73\x00\x00\x00\x00\x06\x00\x05\x00\x1F\x00\x00\x00"
|
||||
"\x04\x00\x00\x00\x65\x5F\x74\x69\x6D\x65\x00\x00\x06\x00\x07\x00\x1F\x00\x00\x00\x05\x00\x00\x00\x65\x5F\x6C\x69\x67\x68\x74\x5F"
|
||||
"\x61\x6D\x62\x69\x65\x6E\x74\x00\x06\x00\x05\x00\x1F\x00\x00\x00\x06\x00\x00\x00\x65\x70\x61\x64\x31\x00\x00\x00\x06\x00\x06\x00"
|
||||
"\x1F\x00\x00\x00\x07\x00\x00\x00\x65\x5F\x6C\x69\x67\x68\x74\x5F\x64\x69\x72\x00\x06\x00\x05\x00\x1F\x00\x00\x00\x08\x00\x00\x00"
|
||||
"\x65\x70\x61\x64\x32\x00\x00\x00\x06\x00\x06\x00\x1F\x00\x00\x00\x09\x00\x00\x00\x65\x5F\x6C\x69\x67\x68\x74\x5F\x6D\x75\x6C\x00"
|
||||
"\x06\x00\x05\x00\x1F\x00\x00\x00\x0A\x00\x00\x00\x65\x70\x61\x64\x33\x00\x00\x00\x06\x00\x06\x00\x1F\x00\x00\x00\x0B\x00\x00\x00"
|
||||
"\x65\x5F\x6C\x6D\x73\x63\x61\x6C\x65\x73\x00\x00\x06\x00\x07\x00\x1F\x00\x00\x00\x0C\x00\x00\x00\x65\x5F\x75\x70\x70\x65\x72\x63"
|
||||
"\x6F\x6C\x6F\x75\x72\x00\x00\x00\x06\x00\x05\x00\x1F\x00\x00\x00\x0D\x00\x00\x00\x65\x70\x61\x64\x34\x00\x00\x00\x06\x00\x07\x00"
|
||||
"\x1F\x00\x00\x00\x0E\x00\x00\x00\x65\x5F\x6C\x6F\x77\x65\x72\x63\x6F\x6C\x6F\x75\x72\x00\x00\x00\x06\x00\x05\x00\x1F\x00\x00\x00"
|
||||
"\x0F\x00\x00\x00\x65\x70\x61\x64\x35\x00\x00\x00\x06\x00\x06\x00\x1F\x00\x00\x00\x10\x00\x00\x00\x65\x5F\x67\x6C\x6F\x77\x6D\x6F"
|
||||
"\x64\x00\x00\x00\x06\x00\x05\x00\x1F\x00\x00\x00\x11\x00\x00\x00\x65\x70\x61\x64\x36\x00\x00\x00\x06\x00\x07\x00\x1F\x00\x00\x00"
|
||||
"\x12\x00\x00\x00\x65\x5F\x63\x6F\x6C\x6F\x75\x72\x69\x64\x65\x6E\x74\x00\x00\x00\x06\x00\x07\x00\x1F\x00\x00\x00\x13\x00\x00\x00"
|
||||
"\x77\x5F\x66\x6F\x67\x63\x6F\x6C\x6F\x75\x72\x73\x00\x00\x00\x00\x06\x00\x07\x00\x1F\x00\x00\x00\x14\x00\x00\x00\x77\x5F\x66\x6F"
|
||||
"\x67\x64\x65\x6E\x73\x69\x74\x79\x00\x00\x00\x00\x06\x00\x07\x00\x1F\x00\x00\x00\x15\x00\x00\x00\x77\x5F\x66\x6F\x67\x64\x65\x70"
|
||||
"\x74\x68\x62\x69\x61\x73\x00\x00\x06\x00\x05\x00\x1F\x00\x00\x00\x16\x00\x00\x00\x65\x70\x61\x64\x37\x00\x00\x00\x05\x00\x03\x00"
|
||||
"\x21\x00\x00\x00\x00\x00\x00\x00\x05\x00\x06\x00\x27\x00\x00\x00\x67\x6C\x5F\x46\x72\x61\x67\x43\x6F\x6F\x72\x64\x00\x00\x00\x00"
|
||||
"\x05\x00\x07\x00\x38\x00\x00\x00\x5F\x63\x76\x61\x72\x5F\x72\x5F\x66\x6F\x67\x5F\x65\x78\x70\x32\x00\x00\x00\x00\x05\x00\x03\x00"
|
||||
"\x3F\x00\x00\x00\x66\x61\x63\x00\x05\x00\x03\x00\x58\x00\x00\x00\x63\x6F\x6C\x00\x05\x00\x04\x00\x5C\x00\x00\x00\x73\x5F\x74\x30"
|
||||
"\x00\x00\x00\x00\x05\x00\x03\x00\x5F\x00\x00\x00\x74\x63\x00\x00\x05\x00\x05\x00\x62\x00\x00\x00\x61\x72\x67\x5F\x4D\x41\x53\x4B"
|
||||
"\x00\x00\x00\x00\x05\x00\x05\x00\x6E\x00\x00\x00\x6F\x75\x74\x63\x6F\x6C\x6F\x75\x72\x00\x00\x00\x05\x00\x03\x00\x70\x00\x00\x00"
|
||||
"\x76\x63\x00\x00\x05\x00\x04\x00\x78\x00\x00\x00\x70\x61\x72\x61\x6D\x00\x00\x00\x05\x00\x05\x00\x7A\x00\x00\x00\x6C\x69\x67\x68"
|
||||
"\x74\x62\x6C\x6F\x63\x6B\x00\x00\x06\x00\x07\x00\x7A\x00\x00\x00\x00\x00\x00\x00\x6C\x5F\x63\x75\x62\x65\x6D\x61\x74\x72\x69\x78"
|
||||
"\x00\x00\x00\x00\x06\x00\x07\x00\x7A\x00\x00\x00\x01\x00\x00\x00\x6C\x5F\x6C\x69\x67\x68\x74\x70\x6F\x73\x69\x74\x69\x6F\x6E\x00"
|
||||
"\x06\x00\x05\x00\x7A\x00\x00\x00\x02\x00\x00\x00\x6C\x70\x61\x64\x31\x00\x00\x00\x06\x00\x07\x00\x7A\x00\x00\x00\x03\x00\x00\x00"
|
||||
"\x6C\x5F\x6C\x69\x67\x68\x74\x63\x6F\x6C\x6F\x75\x72\x00\x00\x00\x06\x00\x05\x00\x7A\x00\x00\x00\x04\x00\x00\x00\x6C\x70\x61\x64"
|
||||
"\x32\x00\x00\x00\x06\x00\x08\x00\x7A\x00\x00\x00\x05\x00\x00\x00\x6C\x5F\x6C\x69\x67\x68\x74\x63\x6F\x6C\x6F\x75\x72\x73\x63\x61"
|
||||
"\x6C\x65\x00\x00\x06\x00\x07\x00\x7A\x00\x00\x00\x06\x00\x00\x00\x6C\x5F\x6C\x69\x67\x68\x74\x72\x61\x64\x69\x75\x73\x00\x00\x00"
|
||||
"\x06\x00\x07\x00\x7A\x00\x00\x00\x07\x00\x00\x00\x6C\x5F\x73\x68\x61\x64\x6F\x77\x6D\x61\x70\x70\x72\x6F\x6A\x00\x06\x00\x08\x00"
|
||||
"\x7A\x00\x00\x00\x08\x00\x00\x00\x6C\x5F\x73\x68\x61\x64\x6F\x77\x6D\x61\x70\x73\x63\x61\x6C\x65\x00\x00\x00\x00\x06\x00\x05\x00"
|
||||
"\x7A\x00\x00\x00\x09\x00\x00\x00\x6C\x70\x61\x64\x33\x00\x00\x00\x05\x00\x03\x00\x7C\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00"
|
||||
"\x0E\x00\x00\x00\x01\x00\x00\x00\x15\x00\x00\x00\x47\x00\x04\x00\x1D\x00\x00\x00\x06\x00\x00\x00\x10\x00\x00\x00\x48\x00\x04\x00"
|
||||
"\x1F\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x48\x00\x05\x00\x1F\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x48\x00\x04\x00\x1F\x00\x00\x00\x01\x00\x00\x00"
|
||||
"\x05\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x01\x00\x00\x00\x23\x00\x00\x00\x40\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00"
|
||||
"\x01\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x48\x00\x04\x00\x1F\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x48\x00\x05\x00"
|
||||
"\x1F\x00\x00\x00\x02\x00\x00\x00\x23\x00\x00\x00\x80\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00"
|
||||
"\x10\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x03\x00\x00\x00\x23\x00\x00\x00\xC0\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00"
|
||||
"\x04\x00\x00\x00\x23\x00\x00\x00\xCC\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x05\x00\x00\x00\x23\x00\x00\x00\xD0\x00\x00\x00"
|
||||
"\x48\x00\x05\x00\x1F\x00\x00\x00\x06\x00\x00\x00\x23\x00\x00\x00\xDC\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x07\x00\x00\x00"
|
||||
"\x23\x00\x00\x00\xE0\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x08\x00\x00\x00\x23\x00\x00\x00\xEC\x00\x00\x00\x48\x00\x05\x00"
|
||||
"\x1F\x00\x00\x00\x09\x00\x00\x00\x23\x00\x00\x00\xF0\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x0A\x00\x00\x00\x23\x00\x00\x00"
|
||||
"\xFC\x00\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x0B\x00\x00\x00\x23\x00\x00\x00\x00\x01\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00"
|
||||
"\x0C\x00\x00\x00\x23\x00\x00\x00\x40\x01\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x0D\x00\x00\x00\x23\x00\x00\x00\x4C\x01\x00\x00"
|
||||
"\x48\x00\x05\x00\x1F\x00\x00\x00\x0E\x00\x00\x00\x23\x00\x00\x00\x50\x01\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x0F\x00\x00\x00"
|
||||
"\x23\x00\x00\x00\x5C\x01\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x10\x00\x00\x00\x23\x00\x00\x00\x60\x01\x00\x00\x48\x00\x05\x00"
|
||||
"\x1F\x00\x00\x00\x11\x00\x00\x00\x23\x00\x00\x00\x6C\x01\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x12\x00\x00\x00\x23\x00\x00\x00"
|
||||
"\x70\x01\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x13\x00\x00\x00\x23\x00\x00\x00\x80\x01\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00"
|
||||
"\x14\x00\x00\x00\x23\x00\x00\x00\x90\x01\x00\x00\x48\x00\x05\x00\x1F\x00\x00\x00\x15\x00\x00\x00\x23\x00\x00\x00\x94\x01\x00\x00"
|
||||
"\x48\x00\x05\x00\x1F\x00\x00\x00\x16\x00\x00\x00\x23\x00\x00\x00\x98\x01\x00\x00\x47\x00\x03\x00\x1F\x00\x00\x00\x02\x00\x00\x00"
|
||||
"\x47\x00\x04\x00\x21\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00\x21\x00\x00\x00\x21\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x47\x00\x04\x00\x27\x00\x00\x00\x0B\x00\x00\x00\x0F\x00\x00\x00\x47\x00\x04\x00\x38\x00\x00\x00\x01\x00\x00\x00\x01\x01\x00\x00"
|
||||
"\x47\x00\x04\x00\x5C\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00\x5C\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00"
|
||||
"\x47\x00\x04\x00\x5F\x00\x00\x00\x1E\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00\x62\x00\x00\x00\x01\x00\x00\x00\x00\x01\x00\x00"
|
||||
"\x47\x00\x04\x00\x6E\x00\x00\x00\x1E\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00\x70\x00\x00\x00\x1E\x00\x00\x00\x01\x00\x00\x00"
|
||||
"\x48\x00\x04\x00\x7A\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x48\x00\x05\x00\x7A\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x48\x00\x05\x00\x7A\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x10\x00\x00\x00\x48\x00\x05\x00\x7A\x00\x00\x00"
|
||||
"\x01\x00\x00\x00\x23\x00\x00\x00\x40\x00\x00\x00\x48\x00\x05\x00\x7A\x00\x00\x00\x02\x00\x00\x00\x23\x00\x00\x00\x4C\x00\x00\x00"
|
||||
"\x48\x00\x05\x00\x7A\x00\x00\x00\x03\x00\x00\x00\x23\x00\x00\x00\x50\x00\x00\x00\x48\x00\x05\x00\x7A\x00\x00\x00\x04\x00\x00\x00"
|
||||
"\x23\x00\x00\x00\x5C\x00\x00\x00\x48\x00\x05\x00\x7A\x00\x00\x00\x05\x00\x00\x00\x23\x00\x00\x00\x60\x00\x00\x00\x48\x00\x05\x00"
|
||||
"\x7A\x00\x00\x00\x06\x00\x00\x00\x23\x00\x00\x00\x6C\x00\x00\x00\x48\x00\x05\x00\x7A\x00\x00\x00\x07\x00\x00\x00\x23\x00\x00\x00"
|
||||
"\x70\x00\x00\x00\x48\x00\x05\x00\x7A\x00\x00\x00\x08\x00\x00\x00\x23\x00\x00\x00\x80\x00\x00\x00\x48\x00\x05\x00\x7A\x00\x00\x00"
|
||||
"\x09\x00\x00\x00\x23\x00\x00\x00\x88\x00\x00\x00\x47\x00\x03\x00\x7A\x00\x00\x00\x02\x00\x00\x00\x47\x00\x04\x00\x7C\x00\x00\x00"
|
||||
"\x22\x00\x00\x00\x00\x00\x00\x00\x47\x00\x04\x00\x7C\x00\x00\x00\x21\x00\x00\x00\x01\x00\x00\x00\x13\x00\x02\x00\x02\x00\x00\x00"
|
||||
"\x21\x00\x03\x00\x03\x00\x00\x00\x02\x00\x00\x00\x16\x00\x03\x00\x06\x00\x00\x00\x20\x00\x00\x00\x17\x00\x04\x00\x07\x00\x00\x00"
|
||||
"\x06\x00\x00\x00\x04\x00\x00\x00\x20\x00\x04\x00\x08\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x21\x00\x04\x00\x09\x00\x00\x00"
|
||||
"\x07\x00\x00\x00\x08\x00\x00\x00\x15\x00\x04\x00\x0D\x00\x00\x00\x20\x00\x00\x00\x01\x00\x00\x00\x32\x00\x04\x00\x0D\x00\x00\x00"
|
||||
"\x0E\x00\x00\x00\x15\x00\x00\x00\x2B\x00\x04\x00\x0D\x00\x00\x00\x0F\x00\x00\x00\x00\x00\x00\x00\x14\x00\x02\x00\x10\x00\x00\x00"
|
||||
"\x34\x00\x06\x00\x10\x00\x00\x00\x11\x00\x00\x00\xAB\x00\x00\x00\x0E\x00\x00\x00\x0F\x00\x00\x00\x34\x00\x05\x00\x10\x00\x00\x00"
|
||||
"\x12\x00\x00\x00\xA8\x00\x00\x00\x11\x00\x00\x00\x20\x00\x04\x00\x17\x00\x00\x00\x07\x00\x00\x00\x06\x00\x00\x00\x18\x00\x04\x00"
|
||||
"\x19\x00\x00\x00\x07\x00\x00\x00\x04\x00\x00\x00\x17\x00\x04\x00\x1A\x00\x00\x00\x06\x00\x00\x00\x03\x00\x00\x00\x15\x00\x04\x00"
|
||||
"\x1B\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x2B\x00\x04\x00\x1B\x00\x00\x00\x1C\x00\x00\x00\x04\x00\x00\x00\x1C\x00\x04\x00"
|
||||
"\x1D\x00\x00\x00\x07\x00\x00\x00\x1C\x00\x00\x00\x17\x00\x04\x00\x1E\x00\x00\x00\x06\x00\x00\x00\x02\x00\x00\x00\x1E\x00\x19\x00"
|
||||
"\x1F\x00\x00\x00\x19\x00\x00\x00\x19\x00\x00\x00\x19\x00\x00\x00\x1A\x00\x00\x00\x06\x00\x00\x00\x1A\x00\x00\x00\x06\x00\x00\x00"
|
||||
"\x1A\x00\x00\x00\x06\x00\x00\x00\x1A\x00\x00\x00\x06\x00\x00\x00\x1D\x00\x00\x00\x1A\x00\x00\x00\x06\x00\x00\x00\x1A\x00\x00\x00"
|
||||
"\x06\x00\x00\x00\x1A\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x06\x00\x00\x00\x06\x00\x00\x00\x1E\x00\x00\x00"
|
||||
"\x20\x00\x04\x00\x20\x00\x00\x00\x02\x00\x00\x00\x1F\x00\x00\x00\x3B\x00\x04\x00\x20\x00\x00\x00\x21\x00\x00\x00\x02\x00\x00\x00"
|
||||
"\x2B\x00\x04\x00\x0D\x00\x00\x00\x22\x00\x00\x00\x14\x00\x00\x00\x20\x00\x04\x00\x23\x00\x00\x00\x02\x00\x00\x00\x06\x00\x00\x00"
|
||||
"\x20\x00\x04\x00\x26\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x3B\x00\x04\x00\x26\x00\x00\x00\x27\x00\x00\x00\x01\x00\x00\x00"
|
||||
"\x2B\x00\x04\x00\x1B\x00\x00\x00\x28\x00\x00\x00\x02\x00\x00\x00\x20\x00\x04\x00\x29\x00\x00\x00\x01\x00\x00\x00\x06\x00\x00\x00"
|
||||
"\x2B\x00\x04\x00\x1B\x00\x00\x00\x2D\x00\x00\x00\x03\x00\x00\x00\x2B\x00\x04\x00\x06\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x2B\x00\x04\x00\x0D\x00\x00\x00\x33\x00\x00\x00\x15\x00\x00\x00\x32\x00\x04\x00\x0D\x00\x00\x00\x38\x00\x00\x00\x01\x01\x00\x00"
|
||||
"\x34\x00\x06\x00\x10\x00\x00\x00\x39\x00\x00\x00\xAB\x00\x00\x00\x38\x00\x00\x00\x0F\x00\x00\x00\x2B\x00\x04\x00\x06\x00\x00\x00"
|
||||
"\x41\x00\x00\x00\x3B\xAA\xB8\x3F\x2B\x00\x04\x00\x06\x00\x00\x00\x45\x00\x00\x00\x00\x00\x80\x3F\x2B\x00\x04\x00\x0D\x00\x00\x00"
|
||||
"\x46\x00\x00\x00\x13\x00\x00\x00\x19\x00\x09\x00\x59\x00\x00\x00\x06\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x1B\x00\x03\x00\x5A\x00\x00\x00\x59\x00\x00\x00\x20\x00\x04\x00\x5B\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\x5A\x00\x00\x00\x3B\x00\x04\x00\x5B\x00\x00\x00\x5C\x00\x00\x00\x00\x00\x00\x00\x20\x00\x04\x00\x5E\x00\x00\x00"
|
||||
"\x01\x00\x00\x00\x1E\x00\x00\x00\x3B\x00\x04\x00\x5E\x00\x00\x00\x5F\x00\x00\x00\x01\x00\x00\x00\x32\x00\x04\x00\x06\x00\x00\x00"
|
||||
"\x62\x00\x00\x00\x00\x00\x80\x43\x20\x00\x04\x00\x6D\x00\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00\x3B\x00\x04\x00\x6D\x00\x00\x00"
|
||||
"\x6E\x00\x00\x00\x03\x00\x00\x00\x3B\x00\x04\x00\x26\x00\x00\x00\x70\x00\x00\x00\x01\x00\x00\x00\x2B\x00\x04\x00\x0D\x00\x00\x00"
|
||||
"\x73\x00\x00\x00\x12\x00\x00\x00\x20\x00\x04\x00\x74\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x1E\x00\x0C\x00\x7A\x00\x00\x00"
|
||||
"\x19\x00\x00\x00\x1A\x00\x00\x00\x06\x00\x00\x00\x1A\x00\x00\x00\x06\x00\x00\x00\x1A\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00"
|
||||
"\x1E\x00\x00\x00\x1E\x00\x00\x00\x20\x00\x04\x00\x7B\x00\x00\x00\x02\x00\x00\x00\x7A\x00\x00\x00\x3B\x00\x04\x00\x7B\x00\x00\x00"
|
||||
"\x7C\x00\x00\x00\x02\x00\x00\x00\x36\x00\x05\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\xF8\x00\x02\x00"
|
||||
"\x05\x00\x00\x00\x3B\x00\x04\x00\x08\x00\x00\x00\x58\x00\x00\x00\x07\x00\x00\x00\x3B\x00\x04\x00\x08\x00\x00\x00\x78\x00\x00\x00"
|
||||
"\x07\x00\x00\x00\x3D\x00\x04\x00\x5A\x00\x00\x00\x5D\x00\x00\x00\x5C\x00\x00\x00\x3D\x00\x04\x00\x1E\x00\x00\x00\x60\x00\x00\x00"
|
||||
"\x5F\x00\x00\x00\x57\x00\x05\x00\x07\x00\x00\x00\x61\x00\x00\x00\x5D\x00\x00\x00\x60\x00\x00\x00\x3E\x00\x03\x00\x58\x00\x00\x00"
|
||||
"\x61\x00\x00\x00\xB6\x00\x05\x00\x10\x00\x00\x00\x63\x00\x00\x00\x62\x00\x00\x00\x31\x00\x00\x00\xF7\x00\x03\x00\x65\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\xFA\x00\x04\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\xF8\x00\x02\x00\x64\x00\x00\x00\x41\x00\x05\x00"
|
||||
"\x17\x00\x00\x00\x66\x00\x00\x00\x58\x00\x00\x00\x2D\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x67\x00\x00\x00\x66\x00\x00\x00"
|
||||
"\xB8\x00\x05\x00\x10\x00\x00\x00\x68\x00\x00\x00\x67\x00\x00\x00\x62\x00\x00\x00\xF9\x00\x02\x00\x65\x00\x00\x00\xF8\x00\x02\x00"
|
||||
"\x65\x00\x00\x00\xF5\x00\x07\x00\x10\x00\x00\x00\x69\x00\x00\x00\x63\x00\x00\x00\x05\x00\x00\x00\x68\x00\x00\x00\x64\x00\x00\x00"
|
||||
"\xF7\x00\x03\x00\x6B\x00\x00\x00\x00\x00\x00\x00\xFA\x00\x04\x00\x69\x00\x00\x00\x6A\x00\x00\x00\x6B\x00\x00\x00\xF8\x00\x02\x00"
|
||||
"\x6A\x00\x00\x00\xFC\x00\x01\x00\xF8\x00\x02\x00\x6B\x00\x00\x00\x3D\x00\x04\x00\x07\x00\x00\x00\x6F\x00\x00\x00\x58\x00\x00\x00"
|
||||
"\x3D\x00\x04\x00\x07\x00\x00\x00\x71\x00\x00\x00\x70\x00\x00\x00\x85\x00\x05\x00\x07\x00\x00\x00\x72\x00\x00\x00\x6F\x00\x00\x00"
|
||||
"\x71\x00\x00\x00\x41\x00\x05\x00\x74\x00\x00\x00\x75\x00\x00\x00\x21\x00\x00\x00\x73\x00\x00\x00\x3D\x00\x04\x00\x07\x00\x00\x00"
|
||||
"\x76\x00\x00\x00\x75\x00\x00\x00\x85\x00\x05\x00\x07\x00\x00\x00\x77\x00\x00\x00\x72\x00\x00\x00\x76\x00\x00\x00\x3E\x00\x03\x00"
|
||||
"\x78\x00\x00\x00\x77\x00\x00\x00\x39\x00\x05\x00\x07\x00\x00\x00\x79\x00\x00\x00\x0B\x00\x00\x00\x78\x00\x00\x00\x3E\x00\x03\x00"
|
||||
"\x6E\x00\x00\x00\x79\x00\x00\x00\xFD\x00\x01\x00\x38\x00\x01\x00\x36\x00\x05\x00\x07\x00\x00\x00\x0B\x00\x00\x00\x00\x00\x00\x00"
|
||||
"\x09\x00\x00\x00\x37\x00\x03\x00\x08\x00\x00\x00\x0A\x00\x00\x00\xF8\x00\x02\x00\x0C\x00\x00\x00\x3B\x00\x04\x00\x17\x00\x00\x00"
|
||||
"\x18\x00\x00\x00\x07\x00\x00\x00\x3B\x00\x04\x00\x17\x00\x00\x00\x3F\x00\x00\x00\x07\x00\x00\x00\xF7\x00\x03\x00\x14\x00\x00\x00"
|
||||
"\x00\x00\x00\x00\xFA\x00\x04\x00\x12\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\xF8\x00\x02\x00\x13\x00\x00\x00\x3D\x00\x04\x00"
|
||||
"\x07\x00\x00\x00\x15\x00\x00\x00\x0A\x00\x00\x00\xFE\x00\x02\x00\x15\x00\x00\x00\xF8\x00\x02\x00\x14\x00\x00\x00\x41\x00\x05\x00"
|
||||
"\x23\x00\x00\x00\x24\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x25\x00\x00\x00\x24\x00\x00\x00"
|
||||
"\x41\x00\x05\x00\x29\x00\x00\x00\x2A\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x2B\x00\x00\x00"
|
||||
"\x2A\x00\x00\x00\x85\x00\x05\x00\x06\x00\x00\x00\x2C\x00\x00\x00\x25\x00\x00\x00\x2B\x00\x00\x00\x41\x00\x05\x00\x29\x00\x00\x00"
|
||||
"\x2E\x00\x00\x00\x27\x00\x00\x00\x2D\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x2F\x00\x00\x00\x2E\x00\x00\x00\x88\x00\x05\x00"
|
||||
"\x06\x00\x00\x00\x30\x00\x00\x00\x2C\x00\x00\x00\x2F\x00\x00\x00\x3E\x00\x03\x00\x18\x00\x00\x00\x30\x00\x00\x00\x3D\x00\x04\x00"
|
||||
"\x06\x00\x00\x00\x32\x00\x00\x00\x18\x00\x00\x00\x41\x00\x05\x00\x23\x00\x00\x00\x34\x00\x00\x00\x21\x00\x00\x00\x33\x00\x00\x00"
|
||||
"\x3D\x00\x04\x00\x06\x00\x00\x00\x35\x00\x00\x00\x34\x00\x00\x00\x83\x00\x05\x00\x06\x00\x00\x00\x36\x00\x00\x00\x32\x00\x00\x00"
|
||||
"\x35\x00\x00\x00\x0C\x00\x07\x00\x06\x00\x00\x00\x37\x00\x00\x00\x01\x00\x00\x00\x28\x00\x00\x00\x31\x00\x00\x00\x36\x00\x00\x00"
|
||||
"\x3E\x00\x03\x00\x18\x00\x00\x00\x37\x00\x00\x00\xF7\x00\x03\x00\x3B\x00\x00\x00\x00\x00\x00\x00\xFA\x00\x04\x00\x39\x00\x00\x00"
|
||||
"\x3A\x00\x00\x00\x3B\x00\x00\x00\xF8\x00\x02\x00\x3A\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x3C\x00\x00\x00\x18\x00\x00\x00"
|
||||
"\x3D\x00\x04\x00\x06\x00\x00\x00\x3D\x00\x00\x00\x18\x00\x00\x00\x85\x00\x05\x00\x06\x00\x00\x00\x3E\x00\x00\x00\x3D\x00\x00\x00"
|
||||
"\x3C\x00\x00\x00\x3E\x00\x03\x00\x18\x00\x00\x00\x3E\x00\x00\x00\xF9\x00\x02\x00\x3B\x00\x00\x00\xF8\x00\x02\x00\x3B\x00\x00\x00"
|
||||
"\x3D\x00\x04\x00\x06\x00\x00\x00\x40\x00\x00\x00\x18\x00\x00\x00\x85\x00\x05\x00\x06\x00\x00\x00\x42\x00\x00\x00\x40\x00\x00\x00"
|
||||
"\x41\x00\x00\x00\x7F\x00\x04\x00\x06\x00\x00\x00\x43\x00\x00\x00\x42\x00\x00\x00\x0C\x00\x06\x00\x06\x00\x00\x00\x44\x00\x00\x00"
|
||||
"\x01\x00\x00\x00\x1D\x00\x00\x00\x43\x00\x00\x00\x3E\x00\x03\x00\x3F\x00\x00\x00\x44\x00\x00\x00\x41\x00\x06\x00\x23\x00\x00\x00"
|
||||
"\x47\x00\x00\x00\x21\x00\x00\x00\x46\x00\x00\x00\x2D\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x48\x00\x00\x00\x47\x00\x00\x00"
|
||||
"\x83\x00\x05\x00\x06\x00\x00\x00\x49\x00\x00\x00\x45\x00\x00\x00\x48\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x4A\x00\x00\x00"
|
||||
"\x3F\x00\x00\x00\x0C\x00\x08\x00\x06\x00\x00\x00\x4B\x00\x00\x00\x01\x00\x00\x00\x2B\x00\x00\x00\x4A\x00\x00\x00\x31\x00\x00\x00"
|
||||
"\x45\x00\x00\x00\x41\x00\x06\x00\x23\x00\x00\x00\x4C\x00\x00\x00\x21\x00\x00\x00\x46\x00\x00\x00\x2D\x00\x00\x00\x3D\x00\x04\x00"
|
||||
"\x06\x00\x00\x00\x4D\x00\x00\x00\x4C\x00\x00\x00\x85\x00\x05\x00\x06\x00\x00\x00\x4E\x00\x00\x00\x4B\x00\x00\x00\x4D\x00\x00\x00"
|
||||
"\x81\x00\x05\x00\x06\x00\x00\x00\x4F\x00\x00\x00\x49\x00\x00\x00\x4E\x00\x00\x00\x3E\x00\x03\x00\x3F\x00\x00\x00\x4F\x00\x00\x00"
|
||||
"\x3D\x00\x04\x00\x07\x00\x00\x00\x50\x00\x00\x00\x0A\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x51\x00\x00\x00\x3F\x00\x00\x00"
|
||||
"\x3D\x00\x04\x00\x06\x00\x00\x00\x52\x00\x00\x00\x3F\x00\x00\x00\x3D\x00\x04\x00\x06\x00\x00\x00\x53\x00\x00\x00\x3F\x00\x00\x00"
|
||||
"\x50\x00\x07\x00\x07\x00\x00\x00\x54\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x45\x00\x00\x00\x85\x00\x05\x00"
|
||||
"\x07\x00\x00\x00\x55\x00\x00\x00\x50\x00\x00\x00\x54\x00\x00\x00\xFE\x00\x02\x00\x55\x00\x00\x00\x38\x00\x01\x00"},
|
||||
#endif
|
||||
#ifdef GLQUAKE
|
||||
{QR_OPENGL, 110, "defaultskin",
|
||||
"!!ver 100 150\n"
|
||||
|
@ -5563,7 +5839,7 @@ YOU SHOULD NOT EDIT THIS FILE BY HAND
|
|||
#endif
|
||||
#ifdef VKQUAKE
|
||||
{QR_VULKAN, -1, "defaultwall",
|
||||
"\xFF\x53\x50\x56\x01\x00\x00\x00\x9C\x1F\x00\x00\x01\x00\x00\x00\x2B\x00\x00\x00\x2C\x00\x00\x00\xA6\x00\x00\x00\xD4\x00\x00\x00"
|
||||
"\xFF\x53\x50\x56\x01\x00\x00\x00\x9C\x37\x00\x00\x01\x00\x00\x00\x2B\x00\x00\x00\x2C\x00\x00\x00\xA6\x00\x00\x00\xD4\x00\x00\x00"
|
||||
"\x48\x16\x00\x00\x1C\x17\x00\x00\x20\x3D\x00\x00\x01\x00\x66\x31\x72\x5F\x67\x6C\x73\x6C\x5F\x6F\x66\x66\x73\x65\x74\x6D\x61\x70"
|
||||
"\x70\x69\x6E\x67\x00\x00\x00\x00\x00\x01\x01\x66\x31\x72\x5F\x67\x6C\x73\x6C\x5F\x6F\x66\x66\x73\x65\x74\x6D\x61\x70\x70\x69\x6E"
|
||||
"\x67\x5F\x73\x63\x61\x6C\x65\x00\x3D\x23\xD7\x0A\x01\x02\x66\x31\x67\x6C\x5F\x73\x70\x65\x63\x75\x6C\x61\x72\x00\x3E\x99\x99\x9A"
|
||||
|
|
|
@ -269,6 +269,7 @@ typedef struct shaderpass_s {
|
|||
T_GEN_PALETTED, //texture's original paletted data (8bit)
|
||||
T_GEN_REFLECTCUBE, //dpreflectcube
|
||||
T_GEN_REFLECTMASK, //dpreflectcube mask
|
||||
T_GEN_DISPLACEMENT, //displacement texture (probably half-float or something so higher precision than normalmap.a)
|
||||
|
||||
T_GEN_CURRENTRENDER,//copy the current screen to a texture, and draw that
|
||||
|
||||
|
@ -647,6 +648,7 @@ struct shader_s
|
|||
SHADER_HASPALETTED = 1 << 28, //has a T_GEN_PALETTED pass
|
||||
SHADER_HASCURRENTRENDER = 1 << 29, //has a $currentrender pass
|
||||
SHADER_HASPORTAL = 1 << 30, //reflection image is actually a portal rather than a simple reflection (must be paired with SHADER_HASREFRACT)
|
||||
SHADER_HASDISPLACEMENT = (int)(1u << 31)
|
||||
} flags;
|
||||
|
||||
program_t *prog;
|
||||
|
|
|
@ -3505,43 +3505,50 @@ void SV_Snapshot_BuildQ1(client_t *client, packet_entities_t *pack, pvscamera_t
|
|||
int pvsflags;
|
||||
int limit;
|
||||
int c, maxc = cameras?cameras->numents:0;
|
||||
client_t *seat;
|
||||
|
||||
//this entity is watching from outside themselves. The client is tricked into thinking that they themselves are in the view ent, and a new dummy ent (the old them) must be spawned.
|
||||
if (client->viewent && ISQWCLIENT(client))
|
||||
if (clent && ISQWCLIENT(client))
|
||||
{
|
||||
for (seat = client; seat; seat = seat->controlled)
|
||||
{
|
||||
edict_t *clent = seat->edict;
|
||||
if (!client->viewent)
|
||||
continue;
|
||||
//FIXME: this hack needs cleaning up
|
||||
#ifdef DEPTHOPTIMISE
|
||||
distances[0] = 0;
|
||||
distances[pack->num_entities] = 0;
|
||||
#endif
|
||||
state = &pack->entities[pack->num_entities];
|
||||
pack->num_entities++;
|
||||
state = &pack->entities[pack->num_entities];
|
||||
pack->num_entities++;
|
||||
|
||||
SV_Snapshot_BuildStateQ1(state, clent, client, pack);
|
||||
SV_Snapshot_BuildStateQ1(state, clent, seat, pack);
|
||||
|
||||
state->number = client - svs.clients + 1;
|
||||
state->number = seat - svs.clients + 1;
|
||||
|
||||
//yeah, I doubt anyone will need this
|
||||
if (progstype == PROG_QW)
|
||||
{
|
||||
if ((int)clent->v->effects & QWEF_FLAG1)
|
||||
//yeah, I doubt anyone will need this
|
||||
if (progstype == PROG_QW)
|
||||
{
|
||||
memcpy(&pack->entities[pack->num_entities], state, sizeof(*state));
|
||||
state = &pack->entities[pack->num_entities];
|
||||
pack->num_entities++;
|
||||
state->modelindex = SV_ModelIndex("progs/flag.mdl");
|
||||
state->frame = 0;
|
||||
state->number++; //yeek
|
||||
state->skinnum = 0;
|
||||
}
|
||||
else if ((int)clent->v->effects & QWEF_FLAG2)
|
||||
{
|
||||
memcpy(&pack->entities[pack->num_entities], state, sizeof(*state));
|
||||
state = &pack->entities[pack->num_entities];
|
||||
pack->num_entities++;
|
||||
state->modelindex = SV_ModelIndex("progs/flag.mdl");
|
||||
state->frame = 0;
|
||||
state->number++; //yeek
|
||||
state->skinnum = 1;
|
||||
if ((int)clent->v->effects & QWEF_FLAG1)
|
||||
{
|
||||
memcpy(&pack->entities[pack->num_entities], state, sizeof(*state));
|
||||
state = &pack->entities[pack->num_entities];
|
||||
pack->num_entities++;
|
||||
state->modelindex = SV_ModelIndex("progs/flag.mdl");
|
||||
state->frame = 0;
|
||||
state->number++; //yeek
|
||||
state->skinnum = 0;
|
||||
}
|
||||
else if ((int)clent->v->effects & QWEF_FLAG2)
|
||||
{
|
||||
memcpy(&pack->entities[pack->num_entities], state, sizeof(*state));
|
||||
state = &pack->entities[pack->num_entities];
|
||||
pack->num_entities++;
|
||||
state->modelindex = SV_ModelIndex("progs/flag.mdl");
|
||||
state->frame = 0;
|
||||
state->number++; //yeek
|
||||
state->skinnum = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -229,16 +229,18 @@ int generatevulkanblobs(struct blobheader *blob, size_t maxblobsize, const char
|
|||
blob->defaulttextures |= 1u<<9;
|
||||
else if (!strcasecmp(arg, "reflectmask"))
|
||||
blob->defaulttextures |= 1u<<10;
|
||||
else if (!strcasecmp(arg, "displacement"))
|
||||
blob->defaulttextures |= 1u<<11;
|
||||
|
||||
//batch
|
||||
else if (!strcasecmp(arg, "lightmap"))
|
||||
blob->defaulttextures |= 1u<<11;
|
||||
else if (!strcasecmp(arg, "deluxmap"))
|
||||
blob->defaulttextures |= 1u<<12;
|
||||
else if (!strcasecmp(arg, "deluxmap"))
|
||||
blob->defaulttextures |= 1u<<13;
|
||||
else if (!strcasecmp(arg, "lightmaps"))
|
||||
blob->defaulttextures |= 1u<<11 | 1u<<13 | 1u<<14 | 1u<<15;
|
||||
blob->defaulttextures |= 1u<<12 | 1u<<14 | 1u<<15 | 1u<<16;
|
||||
else if (!strcasecmp(arg, "deluxmaps"))
|
||||
blob->defaulttextures |= 1u<<12 | 1u<<16 | 1u<<17 | 1u<<18;
|
||||
blob->defaulttextures |= 1u<<13 | 1u<<17 | 1u<<18 | 1u<<19;
|
||||
|
||||
//shader pass
|
||||
else if (atoi(arg))
|
||||
|
@ -269,6 +271,7 @@ int generatevulkanblobs(struct blobheader *blob, size_t maxblobsize, const char
|
|||
"uniform sampler2D s_paletted;\n",
|
||||
"uniform samplerCube s_reflectcube;\n",
|
||||
"uniform sampler2D s_reflectmask;\n",
|
||||
"uniform sampler2D s_displacement;\n",
|
||||
|
||||
//batch
|
||||
"uniform sampler2D s_lightmap;\n#define s_lightmap0 s_lightmap\n",
|
||||
|
|
31
engine/shaders/vulkan/defaultadditivesprite.glsl
Normal file
31
engine/shaders/vulkan/defaultadditivesprite.glsl
Normal file
|
@ -0,0 +1,31 @@
|
|||
!!permu FOG
|
||||
!!samps 1
|
||||
!!argf MASK=0
|
||||
!!cvarb r_fog_exp2=true
|
||||
|
||||
//used by both particles and sprites.
|
||||
//note the fog blending mode is all that differs from defaultadditivesprite
|
||||
|
||||
#include "sys/defs.h"
|
||||
#include "sys/fog.h"
|
||||
|
||||
layout(location=0) varying vec2 tc;
|
||||
layout(location=1) varying vec4 vc;
|
||||
|
||||
#ifdef VERTEX_SHADER
|
||||
void main ()
|
||||
{
|
||||
tc = v_texcoord;
|
||||
vc = v_colour;
|
||||
gl_Position = ftetransform();
|
||||
}
|
||||
#endif
|
||||
#ifdef FRAGMENT_SHADER
|
||||
void main ()
|
||||
{
|
||||
vec4 col = texture2D(s_t0, tc);
|
||||
if (arg_MASK!=0.0 && col.a < float(arg_MASK))
|
||||
discard;
|
||||
gl_FragColor = fog4additive(col * vc * e_colourident);
|
||||
}
|
||||
#endif
|
|
@ -4,6 +4,7 @@
|
|||
#include "glquake.h"
|
||||
#include "gl_draw.h"
|
||||
#include "shader.h"
|
||||
#include "renderque.h"
|
||||
|
||||
//FIXME: instead of switching rendertargets and back, we should be using an alternative queue.
|
||||
|
||||
|
@ -1096,7 +1097,7 @@ qboolean VK_LoadBlob(program_t *prog, void *blobdata, const char *name)
|
|||
for (cvardata = prog->cvardata; cvardata < prog->cvardata + prog->cvardatasize; )
|
||||
{
|
||||
unsigned char type = cvardata[2], size = cvardata[3]-'0';
|
||||
char *cvarname;
|
||||
const char *cvarname;
|
||||
cvar_t *var;
|
||||
|
||||
cvardata += 4;
|
||||
|
@ -1105,6 +1106,7 @@ qboolean VK_LoadBlob(program_t *prog, void *blobdata, const char *name)
|
|||
|
||||
if (type >= 'A' && type <= 'Z')
|
||||
{ //args will be handled by the blob loader.
|
||||
//the blob contains default values, overwrite them with the user's preferences...
|
||||
VK_ShaderReadArgument(name, cvarname, type, size, cvardata);
|
||||
}
|
||||
else
|
||||
|
@ -1173,6 +1175,7 @@ void VKBE_DeleteProg(program_t *prog)
|
|||
|
||||
//clear stuff out so that the caller doesn't get confused.
|
||||
Z_Free(prog->cvardata);
|
||||
prog->cvardata = NULL;
|
||||
prog->pipelines = NULL;
|
||||
prog->layout = VK_NULL_HANDLE;
|
||||
prog->desclayout = VK_NULL_HANDLE;
|
||||
|
@ -3164,14 +3167,16 @@ static qboolean BE_SetupMeshProgram(program_t *p, shaderpass_t *pass, unsigned i
|
|||
BE_SetupTextureDescriptor(shaderstate.curtexnums->reflectcube, r_blackimage, set, descs, desc++, img++);
|
||||
if (p->defaulttextures & (1u<<10))
|
||||
BE_SetupTextureDescriptor(shaderstate.curtexnums->reflectmask, r_whiteimage, set, descs, desc++, img++);
|
||||
if (p->defaulttextures & (1u<<11))
|
||||
BE_SetupTextureDescriptor(shaderstate.curtexnums->displacement, r_whiteimage, set, descs, desc++, img++);
|
||||
|
||||
//batch
|
||||
if (p->defaulttextures & (1u<<11))
|
||||
if (p->defaulttextures & (1u<<12))
|
||||
{
|
||||
unsigned int lmi = shaderstate.curbatch->lightmap[0];
|
||||
BE_SetupTextureDescriptor((lmi<numlightmaps)?lightmap[lmi]->lightmap_texture:NULL, r_whiteimage, set, descs, desc++, img++);
|
||||
}
|
||||
if (p->defaulttextures & (1u<<12))
|
||||
if (p->defaulttextures & (1u<<13))
|
||||
{
|
||||
texid_t delux = NULL;
|
||||
unsigned int lmi = shaderstate.curbatch->lightmap[0];
|
||||
|
@ -3180,7 +3185,7 @@ static qboolean BE_SetupMeshProgram(program_t *p, shaderpass_t *pass, unsigned i
|
|||
BE_SetupTextureDescriptor(delux, r_whiteimage, set, descs, desc++, img++);
|
||||
}
|
||||
#if MAXRLIGHTMAPS > 1
|
||||
if (p->defaulttextures & ((1u<<13)|(1u<<14)|(1u<<15)))
|
||||
if (p->defaulttextures & ((1u<<14)|(1u<<15)|(1u<<16)))
|
||||
{
|
||||
int lmi = shaderstate.curbatch->lightmap[1];
|
||||
BE_SetupTextureDescriptor((lmi<numlightmaps)?lightmap[lmi]->lightmap_texture:NULL, r_whiteimage, set, descs, desc++, img++);
|
||||
|
@ -3189,7 +3194,7 @@ static qboolean BE_SetupMeshProgram(program_t *p, shaderpass_t *pass, unsigned i
|
|||
lmi = shaderstate.curbatch->lightmap[3];
|
||||
BE_SetupTextureDescriptor((lmi<numlightmaps)?lightmap[lmi]->lightmap_texture:NULL, r_whiteimage, set, descs, desc++, img++);
|
||||
}
|
||||
if (p->defaulttextures & ((1u<<16)|(1u<<17)|(1u<<18)))
|
||||
if (p->defaulttextures & ((1u<<17)|(1u<<18)|(1u<<19)))
|
||||
{
|
||||
int lmi = shaderstate.curbatch->lightmap[1];
|
||||
if (lmi<numlightmaps && lightmap[lmi]->hasdeluxe)
|
||||
|
@ -6303,6 +6308,10 @@ void VKBE_DrawWorld (batch_t **worldbatches)
|
|||
}
|
||||
|
||||
R_RenderDlights ();
|
||||
if (r_refdef.recurse)
|
||||
RQ_RenderBatch();
|
||||
else
|
||||
RQ_RenderBatchClear();
|
||||
|
||||
shaderstate.identitylighting = 1;
|
||||
|
||||
|
|
|
@ -103,6 +103,51 @@ do { \
|
|||
#define DOBACKTRACE()
|
||||
#endif
|
||||
|
||||
char *VK_VKErrorToString(VkResult err)
|
||||
{
|
||||
switch(err)
|
||||
{
|
||||
//positive codes
|
||||
case VK_SUCCESS: return "VK_SUCCESS";
|
||||
case VK_NOT_READY: return "VK_NOT_READY";
|
||||
case VK_TIMEOUT: return "VK_TIMEOUT";
|
||||
case VK_EVENT_SET: return "VK_EVENT_SET";
|
||||
case VK_EVENT_RESET: return "VK_EVENT_RESET";
|
||||
case VK_INCOMPLETE: return "VK_INCOMPLETE";
|
||||
|
||||
//core errors
|
||||
case VK_ERROR_OUT_OF_HOST_MEMORY: return "VK_ERROR_OUT_OF_HOST_MEMORY";
|
||||
case VK_ERROR_OUT_OF_DEVICE_MEMORY: return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
|
||||
case VK_ERROR_INITIALIZATION_FAILED: return "VK_ERROR_INITIALIZATION_FAILED";
|
||||
case VK_ERROR_DEVICE_LOST: return "VK_ERROR_DEVICE_LOST"; //by far the most common.
|
||||
case VK_ERROR_MEMORY_MAP_FAILED: return "VK_ERROR_MEMORY_MAP_FAILED";
|
||||
case VK_ERROR_LAYER_NOT_PRESENT: return "VK_ERROR_LAYER_NOT_PRESENT";
|
||||
case VK_ERROR_EXTENSION_NOT_PRESENT: return "VK_ERROR_EXTENSION_NOT_PRESENT";
|
||||
case VK_ERROR_FEATURE_NOT_PRESENT: return "VK_ERROR_FEATURE_NOT_PRESENT";
|
||||
case VK_ERROR_INCOMPATIBLE_DRIVER: return "VK_ERROR_INCOMPATIBLE_DRIVER";
|
||||
case VK_ERROR_TOO_MANY_OBJECTS: return "VK_ERROR_TOO_MANY_OBJECTS";
|
||||
case VK_ERROR_FORMAT_NOT_SUPPORTED: return "VK_ERROR_FORMAT_NOT_SUPPORTED";
|
||||
case VK_ERROR_FRAGMENTED_POOL: return "VK_ERROR_FRAGMENTED_POOL";
|
||||
|
||||
case VK_ERROR_SURFACE_LOST_KHR: return "VK_ERROR_SURFACE_LOST_KHR";
|
||||
case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR: return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR";
|
||||
case VK_SUBOPTIMAL_KHR: return "VK_SUBOPTIMAL_KHR";
|
||||
case VK_ERROR_OUT_OF_DATE_KHR: return "VK_ERROR_OUT_OF_DATE_KHR";
|
||||
case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR: return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR";
|
||||
|
||||
case VK_ERROR_VALIDATION_FAILED_EXT: return "VK_ERROR_VALIDATION_FAILED_EXT";
|
||||
case VK_ERROR_INVALID_SHADER_NV: return "VK_ERROR_INVALID_SHADER_NV";
|
||||
case VK_ERROR_OUT_OF_POOL_MEMORY_KHR: return "VK_ERROR_OUT_OF_POOL_MEMORY_KHR";
|
||||
case VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR: return "VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR";
|
||||
|
||||
//irrelevant parts of the enum
|
||||
case VK_RESULT_RANGE_SIZE:
|
||||
case VK_RESULT_MAX_ENUM:
|
||||
//default:
|
||||
break;
|
||||
}
|
||||
return va("%d", (int)err);
|
||||
}
|
||||
#ifdef VK_EXT_debug_utils
|
||||
static void DebugSetName(VkObjectType objtype, uint64_t handle, const char *name)
|
||||
{
|
||||
|
@ -1256,6 +1301,8 @@ vk_image_t VK_CreateTexture2DArray(uint32_t width, uint32_t height, uint32_t lay
|
|||
case PTI_RGBA5551: format = VK_FORMAT_R5G5B5A1_UNORM_PACK16; break;
|
||||
case PTI_ARGB1555: format = VK_FORMAT_A1R5G5B5_UNORM_PACK16; break;
|
||||
//float formats
|
||||
case PTI_R16F: format = VK_FORMAT_R16_SFLOAT; break;
|
||||
case PTI_R32F: format = VK_FORMAT_R32_SFLOAT; break;
|
||||
case PTI_RGBA16F: format = VK_FORMAT_R16G16B16A16_SFLOAT; break;
|
||||
case PTI_RGBA32F: format = VK_FORMAT_R32G32B32A32_SFLOAT; break;
|
||||
//weird formats
|
||||
|
@ -3651,7 +3698,7 @@ void VK_DoPresent(struct vkframe *theframe)
|
|||
err = vkAcquireNextImageKHR(vk.device, vk.swapchain, 0, vk.acquiresemaphores[vk.aquirelast%ACQUIRELIMIT], vk.acquirefences[vk.aquirelast%ACQUIRELIMIT], &vk.acquirebufferidx[vk.aquirelast%ACQUIRELIMIT]);
|
||||
if (err)
|
||||
{
|
||||
Con_Printf("ERROR: vkAcquireNextImageKHR: %i\n", err);
|
||||
Con_Printf("ERROR: vkAcquireNextImageKHR: %s\n", VK_VKErrorToString(err));
|
||||
vk.neednewswapchain = true;
|
||||
vk.devicelost |= (err == VK_ERROR_DEVICE_LOST);
|
||||
}
|
||||
|
@ -3715,7 +3762,8 @@ static void VK_Submit_DoWork(void)
|
|||
err = vkQueueSubmit(subqueue, subcount, subinfo, waitfence);
|
||||
if (err)
|
||||
{
|
||||
Con_Printf("ERROR: vkQueueSubmit: %i\n", err);
|
||||
if (!vk.devicelost)
|
||||
Con_Printf(CON_ERROR "ERROR: vkQueueSubmit: %s\n", VK_VKErrorToString(err));
|
||||
errored = vk.neednewswapchain = true;
|
||||
vk.devicelost |= (err==VK_ERROR_DEVICE_LOST);
|
||||
}
|
||||
|
|
|
@ -196,8 +196,8 @@
|
|||
|
||||
#define vkallocationcb NULL
|
||||
#ifdef _DEBUG
|
||||
#define VkAssert(f) do {VkResult err = f; if (err) Sys_Error("%s == %i", #f, err); } while(0)
|
||||
#define VkWarnAssert(f) do {VkResult err = f; if (err) Con_Printf("%s == %i\n", #f, err); } while(0)
|
||||
#define VkAssert(f) do {VkResult err = f; if (err) Sys_Error("%s == %s", #f, VK_VKErrorToString(err)); } while(0)
|
||||
#define VkWarnAssert(f) do {VkResult err = f; if (err) Con_Printf("%s == %s\n", #f, VK_VKErrorToString(err)); } while(0)
|
||||
#else
|
||||
#define VkAssert(f) f
|
||||
#define VkWarnAssert(f) f
|
||||
|
@ -481,6 +481,7 @@ void VKBE_RT_Begin(struct vk_rendertarg *targ);
|
|||
void VKBE_RT_End(struct vk_rendertarg *targ);
|
||||
void VKBE_RT_Destroy(struct vk_rendertarg *targ);
|
||||
|
||||
char *VK_VKErrorToString(VkResult err); //helper for converting vulkan error codes to strings, if we get something unexpected.
|
||||
|
||||
qboolean VK_AllocatePoolMemory(uint32_t pooltype, VkDeviceSize memsize, VkDeviceSize poolalignment, vk_poolmem_t *mem);
|
||||
void VK_ReleasePoolMemory(vk_poolmem_t *mem);
|
||||
|
|
Loading…
Reference in a new issue