mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-29 07:02:12 +00:00
fix some other issues that exhibited themselves in aqueous.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4835 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
670a5d5992
commit
23971df104
8 changed files with 59 additions and 32 deletions
|
@ -308,7 +308,7 @@ static void CSQC_FindGlobals(void)
|
||||||
|
|
||||||
if (!csqc_world.g.physics_mode)
|
if (!csqc_world.g.physics_mode)
|
||||||
{
|
{
|
||||||
csphysicsmode = csqc_isdarkplaces?1:0;
|
csphysicsmode = 0; /*note: dp handles think functions as part of addentity rather than elsewhere. if we're in a compat mode, we don't want to have to duplicate work*/
|
||||||
csqc_world.g.physics_mode = &csphysicsmode;
|
csqc_world.g.physics_mode = &csphysicsmode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1216,6 +1216,11 @@ void Surf_RenderDynamicLightmaps (msurface_t *fa)
|
||||||
dynamic:
|
dynamic:
|
||||||
RSpeedRemark();
|
RSpeedRemark();
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if ((unsigned)fa->lightmaptexturenums[0] >= numlightmaps)
|
||||||
|
Sys_Error("Invalid lightmap index\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
lm = lightmap[fa->lightmaptexturenums[0]];
|
lm = lightmap[fa->lightmaptexturenums[0]];
|
||||||
|
|
||||||
lm->modified = true;
|
lm->modified = true;
|
||||||
|
@ -2644,7 +2649,7 @@ void Surf_BuildModelLightmaps (model_t *m)
|
||||||
#ifdef TERRAIN
|
#ifdef TERRAIN
|
||||||
//easiest way to deal with heightmap lightmaps is to just purge the entire thing.
|
//easiest way to deal with heightmap lightmaps is to just purge the entire thing.
|
||||||
if (m->terrain)
|
if (m->terrain)
|
||||||
Terr_PurgeTerrainModel(m, true, false);
|
Terr_PurgeTerrainModel(m, false, false); //FIXME: cop out. middle arg should be 'true'.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (m->type != mod_brush)
|
if (m->type != mod_brush)
|
||||||
|
@ -2858,22 +2863,14 @@ void Surf_BuildLightmaps (void)
|
||||||
r_oldviewcluster2 = -1;
|
r_oldviewcluster2 = -1;
|
||||||
numlightmaps = 0;
|
numlightmaps = 0;
|
||||||
|
|
||||||
for (j=1 ; j<MAX_PRECACHE_MODELS ; j++)
|
//FIXME: unload stuff that's no longer relevant somehow.
|
||||||
|
for (i = 0; i < mod_numknown; i++)
|
||||||
{
|
{
|
||||||
m = cl.model_precache[j];
|
m = &mod_known[i];
|
||||||
if (!m)
|
|
||||||
break;
|
|
||||||
if (m->loadstate != MLS_LOADED)
|
if (m->loadstate != MLS_LOADED)
|
||||||
continue;
|
continue;
|
||||||
Surf_BuildModelLightmaps(m);
|
Surf_BuildModelLightmaps(m);
|
||||||
}
|
}
|
||||||
for (j=1 ; j<MAX_CSMODELS ; j++)
|
|
||||||
{
|
|
||||||
m = cl.model_csqcprecache[j];
|
|
||||||
if (!m)
|
|
||||||
break;
|
|
||||||
Surf_BuildModelLightmaps(m);
|
|
||||||
}
|
|
||||||
BE_UploadAllLightmaps();
|
BE_UploadAllLightmaps();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include <process.h>
|
#include <process.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//exports that 3rd-party drivers can see in order to use descrete graphics cards over integrated ones, FOR MORE POWAH!
|
||||||
|
__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
|
||||||
|
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; //13.35+
|
||||||
|
|
||||||
|
|
||||||
wchar_t *widen(wchar_t *out, size_t outlen, const char *utf8);
|
wchar_t *widen(wchar_t *out, size_t outlen, const char *utf8);
|
||||||
char *narrowen(char *out, size_t outlen, wchar_t *wide);
|
char *narrowen(char *out, size_t outlen, wchar_t *wide);
|
||||||
|
|
||||||
|
|
|
@ -2234,6 +2234,12 @@ void Terr_FreeModel(model_t *mod)
|
||||||
if (hm)
|
if (hm)
|
||||||
{
|
{
|
||||||
Terr_PurgeTerrainModel(mod, false, false);
|
Terr_PurgeTerrainModel(mod, false, false);
|
||||||
|
while(hm->entities)
|
||||||
|
{
|
||||||
|
struct hmentity_s *n = hm->entities->next;
|
||||||
|
Z_Free(hm->entities);
|
||||||
|
hm->entities = n;
|
||||||
|
}
|
||||||
Z_Free(hm);
|
Z_Free(hm);
|
||||||
mod->terrain = NULL;
|
mod->terrain = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1247,7 +1247,7 @@ void R_Clear (qboolean fbo)
|
||||||
//for performance, we clear the depth at the same time we clear colour, so we can skip clearing depth here the first time around each frame.
|
//for performance, we clear the depth at the same time we clear colour, so we can skip clearing depth here the first time around each frame.
|
||||||
//but for multiple scenes, we do need to clear depth still.
|
//but for multiple scenes, we do need to clear depth still.
|
||||||
//fbos always get cleared depth, just in case (colour fbos may contain junk, but hey).
|
//fbos always get cleared depth, just in case (colour fbos may contain junk, but hey).
|
||||||
qglClear (GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);
|
qglClear (GL_DEPTH_BUFFER_BIT);
|
||||||
}
|
}
|
||||||
if (!fbo)
|
if (!fbo)
|
||||||
depthcleared = false;
|
depthcleared = false;
|
||||||
|
|
|
@ -416,6 +416,10 @@ static void SH_CalcShadowBatches(model_t *mod)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mod->numshadowbatches)
|
||||||
|
mod->shadowbatches = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
l = NULL;
|
l = NULL;
|
||||||
sb = 0;
|
sb = 0;
|
||||||
mod->shadowbatches = BZ_Malloc(sizeof(*mod->shadowbatches)*mod->numshadowbatches);
|
mod->shadowbatches = BZ_Malloc(sizeof(*mod->shadowbatches)*mod->numshadowbatches);
|
||||||
|
@ -433,6 +437,7 @@ static void SH_CalcShadowBatches(model_t *mod)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void SHM_BeginShadowMesh(dlight_t *dl, int type)
|
static void SHM_BeginShadowMesh(dlight_t *dl, int type)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1037,7 +1037,7 @@ pbool PR_RunGC (progfuncs_t *progfuncs)
|
||||||
unsigned int p;
|
unsigned int p;
|
||||||
char *marked;
|
char *marked;
|
||||||
unsigned int *str;
|
unsigned int *str;
|
||||||
// unsigned int r_l, r_d;
|
unsigned int r_l, r_d;
|
||||||
// unsigned long long starttime, markedtime, endtime;
|
// unsigned long long starttime, markedtime, endtime;
|
||||||
|
|
||||||
//only run the GC when we've itterated each string at least once.
|
//only run the GC when we've itterated each string at least once.
|
||||||
|
@ -1066,13 +1066,13 @@ pbool PR_RunGC (progfuncs_t *progfuncs)
|
||||||
|
|
||||||
//sweep
|
//sweep
|
||||||
// markedtime = Sys_GetClock();
|
// markedtime = Sys_GetClock();
|
||||||
// r_l = 0;
|
r_l = 0;
|
||||||
// r_d = 0;
|
r_d = 0;
|
||||||
for (p = 0; p < prinst.numtempstrings; p++)
|
for (p = 0; p < prinst.numtempstrings; p++)
|
||||||
{
|
{
|
||||||
if (marked[p])
|
if (marked[p])
|
||||||
{
|
{
|
||||||
// r_l++;
|
r_l++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
@ -1082,11 +1082,11 @@ pbool PR_RunGC (progfuncs_t *progfuncs)
|
||||||
{
|
{
|
||||||
if (marked[p])
|
if (marked[p])
|
||||||
{
|
{
|
||||||
// r_l++;
|
r_l++;
|
||||||
}
|
}
|
||||||
else if (prinst.tempstrings[p])
|
else if (prinst.tempstrings[p])
|
||||||
{
|
{
|
||||||
// r_d++;
|
r_d++;
|
||||||
externs->memfree(prinst.tempstrings[p]);
|
externs->memfree(prinst.tempstrings[p]);
|
||||||
prinst.tempstrings[p] = NULL;
|
prinst.tempstrings[p] = NULL;
|
||||||
}
|
}
|
||||||
|
@ -1097,6 +1097,20 @@ pbool PR_RunGC (progfuncs_t *progfuncs)
|
||||||
|
|
||||||
free(marked);
|
free(marked);
|
||||||
|
|
||||||
|
//if over half the (max)strings are still live, just increase the max so we are not spamming collections
|
||||||
|
r_d += prinst.maxtempstrings - prinst.numtempstrings;
|
||||||
|
if (r_l > r_d)
|
||||||
|
{
|
||||||
|
unsigned int newmax = prinst.maxtempstrings * 2;
|
||||||
|
char **ntable = progfuncs->funcs.parms->memalloc(sizeof(char*) * newmax);
|
||||||
|
memcpy(ntable, prinst.tempstrings, sizeof(char*) * prinst.maxtempstrings);
|
||||||
|
memset(ntable+prinst.maxtempstrings, 0, sizeof(char*) * (newmax-prinst.maxtempstrings));
|
||||||
|
prinst.maxtempstrings = newmax;
|
||||||
|
if (prinst.tempstrings)
|
||||||
|
progfuncs->funcs.parms->memfree(prinst.tempstrings);
|
||||||
|
prinst.tempstrings = ntable;
|
||||||
|
}
|
||||||
|
|
||||||
// endtime = Sys_GetClock();
|
// endtime = Sys_GetClock();
|
||||||
// printf("live: %u, dead: %u, time: mark=%f, sweep=%f\n", r_l, r_d, (double)(markedtime - starttime) / Sys_GetClockRate(), (double)(endtime - markedtime) / Sys_GetClockRate());
|
// printf("live: %u, dead: %u, time: mark=%f, sweep=%f\n", r_l, r_d, (double)(markedtime - starttime) / Sys_GetClockRate(), (double)(endtime - markedtime) / Sys_GetClockRate());
|
||||||
|
|
||||||
|
@ -1121,7 +1135,7 @@ void PR_FreeTemps (progfuncs_t *progfuncs, int depth)
|
||||||
#endif
|
#endif
|
||||||
void PR_FreeAllTemps (progfuncs_t *progfuncs)
|
void PR_FreeAllTemps (progfuncs_t *progfuncs)
|
||||||
{
|
{
|
||||||
int i;
|
unsigned int i;
|
||||||
for (i = 0; i < prinst.numtempstrings; i++)
|
for (i = 0; i < prinst.numtempstrings; i++)
|
||||||
{
|
{
|
||||||
externs->memfree(prinst.tempstrings[i]);
|
externs->memfree(prinst.tempstrings[i]);
|
||||||
|
|
|
@ -1588,7 +1588,7 @@ void PDECL PR_ExecuteProgram (pubprogfuncs_t *ppf, func_t fnum)
|
||||||
PR_FreeTemps(progfuncs, tempdepth);
|
PR_FreeTemps(progfuncs, tempdepth);
|
||||||
prinst.numtempstringsstack = tempdepth;
|
prinst.numtempstringsstack = tempdepth;
|
||||||
#else
|
#else
|
||||||
if (!oldexitdepth)
|
if (!pr_depth)
|
||||||
PR_RunGC(progfuncs);
|
PR_RunGC(progfuncs);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue