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:
parent
71b8797d9e
commit
0d17471975
3 changed files with 154 additions and 93 deletions
|
@ -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[] =
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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];
|
||||
|
|
Loading…
Reference in a new issue