Tiny bugfixesish.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/branches/wip@3810 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2011-06-04 16:11:35 +00:00
parent 71b8797d9e
commit 0d17471975
3 changed files with 154 additions and 93 deletions

View File

@ -115,15 +115,54 @@ char *svc_strings[] =
"FTE svc_spawnbaseline2",
"FTE svc_customtempent",
"FTE svc_choosesplitclient",
"FTE svc_showpic",
"FTE svc_hidepic",
"FTE svc_movepic",
"FTE svc_updatepic",
"FTE svcqw_effect",
"FTE svcqw_effect2",
"FTE svc_csqcentities",
"FTE svc_precache",
"FTE svc_choosesplitclient",
"svcfte_showpic",
"svcfte_hidepic",
"svcfte_movepic",
"svcfte_updatepic",
"???",
"svcfte_effect",
"svcfte_effect2",
"svcfte_csqcentities",
"svcfte_precache",
"svcfte_updatestatstring",
"svcfte_updatestatfloat",
"svcfte_trailparticles",
"svcfte_pointparticles",
"svcfte_pointparticles1",
"svcfte_cgamepacket",
"svcfte_voicechat",
"svcfte_setangledelta",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
"???",
};
char *svc_nqstrings[] =

View File

@ -1343,7 +1343,11 @@ static void Shader_FlushGenerics(void)
{
g = sgenerics;
sgenerics = g->next;
free(g);
if (g->prog.refs == 1)
free(g);
else
Con_Printf("generic shader still used\n");
}
}
static program_t *Shader_LoadGeneric(char *name, int qrtype)
@ -2500,6 +2504,61 @@ static shaderkey_t shaderpasskeys[] =
// ===============================================================
void Shader_FreePass (shaderpass_t *pass)
{
#ifndef NOMEDIA
if ( pass->flags & SHADER_PASS_VIDEOMAP )
{
Media_ShutdownCin(pass->cin);
pass->cin = NULL;
}
#endif
}
void Shader_Free (shader_t *shader)
{
int i;
shaderpass_t *pass;
if (shader->bucket.data == shader)
Hash_RemoveData(&shader_active_hash, shader->name, shader);
shader->bucket.data = NULL;
#ifdef GLQUAKE
if (qrenderer == QR_OPENGL && shader->prog)
{
program_t *prog = shader->prog;
int p;
if (--prog->refs == 0)
{
for (p = 0; p < PERMUTATIONS; p++)
{
if (prog->handle[p].glsl)
qglDeleteProgramObject_(prog->handle[p].glsl);
}
free(prog);
}
shader->prog = NULL;
}
#endif
if (shader->skydome)
{
Z_Free (shader->skydome);
}
pass = shader->passes;
for (i = 0; i < shader->numpasses; i++, pass++)
{
Shader_FreePass (pass);
}
shader->numpasses = 0;
}
int Shader_InitCallback (const char *name, int size, void *param)
{
strcpy(shaderbuf+shaderbuflen, name);
@ -2511,6 +2570,7 @@ int Shader_InitCallback (const char *name, int size, void *param)
qboolean Shader_Init (void)
{
int i;
shaderbuflen = 0;
r_shaders = calloc(MAX_SHADERS, sizeof(shader_t));
@ -2521,6 +2581,11 @@ qboolean Shader_Init (void)
memset(shader_active_hash_mem, 0, Hash_BytesForBuckets(1024));
Hash_InitTable(&shader_active_hash, 1024, shader_active_hash_mem);
for (i = 0; i < MAX_SHADERS; i++)
{
if (r_shaders[i].uses)
Shader_Free(&r_shaders[i]);
}
Shader_FlushGenerics();
shader_rescan_needed = true;
Shader_NeedReload();
@ -2636,56 +2701,6 @@ static void Shader_GetPathAndOffset ( char *name, char **path, unsigned int *off
path = NULL;
}
void Shader_FreePass (shaderpass_t *pass)
{
#ifndef NOMEDIA
if ( pass->flags & SHADER_PASS_VIDEOMAP )
{
Media_ShutdownCin(pass->cin);
pass->cin = NULL;
}
#endif
}
void Shader_Free (shader_t *shader)
{
int i;
shaderpass_t *pass;
if (shader->bucket.data == shader)
Hash_RemoveData(&shader_active_hash, shader->name, shader);
shader->bucket.data = NULL;
#ifdef GLQUAKE
if (qrenderer == QR_OPENGL && shader->prog)
{
program_t *prog = shader->prog;
int p;
if (--prog->refs == 0)
{
for (p = 0; p < PERMUTATIONS; p++)
{
if (prog->handle[p].glsl)
qglDeleteProgramObject_(prog->handle[p].glsl);
}
free(prog);
}
shader->prog = NULL;
}
#endif
if (shader->skydome)
{
Z_Free (shader->skydome);
}
pass = shader->passes;
for (i = 0; i < shader->numpasses; i++, pass++)
{
Shader_FreePass (pass);
}
shader->numpasses = 0;
}
void Shader_Reset(shader_t *s)
{
char name[MAX_QPATH];

View File

@ -1611,7 +1611,7 @@ void SV_UpdateClientStats (client_t *client, int pnum)
else
{
#ifdef PEXT_CSQC
if ((client->fteprotocolextensions & PEXT_CSQC) && (sv.csqcchecksum || progstype == PROG_H2))
if (client->fteprotocolextensions & PEXT_CSQC)
{
if (statss[i] || client->statss[i])
if (strcmp(statss[i]?statss[i]:"", client->statss[i]?client->statss[i]:""))
@ -1645,48 +1645,55 @@ void SV_UpdateClientStats (client_t *client, int pnum)
if (statsf[i])
{
if (statsf[i] != client->statsf[i])
if (client->fteprotocolextensions & PEXT_CSQC)
{
if (statsf[i] - (float)(int)statsf[i] == 0 && statsf[i] >= 0 && statsf[i] <= 255)
if (statsf[i] != client->statsf[i])
{
if (pnum)
if (statsf[i] - (float)(int)statsf[i] == 0 && statsf[i] >= 0 && statsf[i] <= 255)
{
ClientReliableWrite_Begin(client->controller, svcfte_choosesplitclient, 5);
ClientReliableWrite_Byte(client->controller, pnum);
ClientReliableWrite_Byte(client->controller, svc_updatestat);
ClientReliableWrite_Byte(client->controller, i);
ClientReliableWrite_Byte(client->controller, statsf[i]);
if (pnum)
{
ClientReliableWrite_Begin(client->controller, svcfte_choosesplitclient, 5);
ClientReliableWrite_Byte(client->controller, pnum);
ClientReliableWrite_Byte(client->controller, svc_updatestat);
ClientReliableWrite_Byte(client->controller, i);
ClientReliableWrite_Byte(client->controller, statsf[i]);
}
else
{
ClientReliableWrite_Begin(client, svc_updatestat, 3);
ClientReliableWrite_Byte(client, i);
ClientReliableWrite_Byte(client, statsf[i]);
}
}
else
{
ClientReliableWrite_Begin(client, svc_updatestat, 3);
ClientReliableWrite_Byte(client, i);
ClientReliableWrite_Byte(client, statsf[i]);
if (pnum)
{
ClientReliableWrite_Begin(client->controller, svcfte_choosesplitclient, 8);
ClientReliableWrite_Byte(client->controller, pnum);
ClientReliableWrite_Byte(client->controller, svcfte_updatestatfloat);
ClientReliableWrite_Byte(client->controller, i);
ClientReliableWrite_Float(client->controller, statsf[i]);
}
else
{
ClientReliableWrite_Begin(client, svcfte_updatestatfloat, 6);
ClientReliableWrite_Byte(client, i);
ClientReliableWrite_Float(client, statsf[i]);
}
}
client->statsf[i] = statsf[i];
/*make sure statsf is correct*/
client->statsi[i] = statsf[i];
}
else
{
if (pnum)
{
ClientReliableWrite_Begin(client->controller, svcfte_choosesplitclient, 8);
ClientReliableWrite_Byte(client->controller, pnum);
ClientReliableWrite_Byte(client->controller, svcfte_updatestatfloat);
ClientReliableWrite_Byte(client->controller, i);
ClientReliableWrite_Float(client->controller, statsf[i]);
}
else
{
ClientReliableWrite_Begin(client, svcfte_updatestatfloat, 6);
ClientReliableWrite_Byte(client, i);
ClientReliableWrite_Float(client, statsf[i]);
}
}
client->statsf[i] = statsf[i];
/*make sure statsf is correct*/
client->statsi[i] = statsf[i];
}
else
{
statsi[i] = statsf[i];
}
}
else if (statsi[i] != client->statsi[i])
if (statsi[i] != client->statsi[i])
{
client->statsi[i] = statsi[i];
client->statsf[i] = statsi[i];