fix ffov, for now.

fix server crash(es).

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4798 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2014-12-08 21:18:32 +00:00
parent 5c2533e207
commit 95cfa0cfac
7 changed files with 53 additions and 25 deletions

View file

@ -1079,6 +1079,13 @@ static void QCBUILTIN PF_R_AddEntityMask(pubprogfuncs_t *prinst, struct globalva
} }
} }
//enum {vb_vertexcoord, vb_texcoord, vb_rgba, vb_normal, vb_sdir, vb_tdir, vb_indexes, vb_rgb, vb_alpha};
//vboidx = vbuff_create(numverts, numidx, flags)
//vbuff_updateptr(vboidx, datatype, ptr, firstvert, numverts)
//vbuff_updateone(vboidx, datatype, index, __variant data)
//vbuff_render(vboidx, shaderid, uniforms, uniformssize)
//vbuff_delete(vboidx), vboidx=0
static shader_t *csqc_poly_shader; static shader_t *csqc_poly_shader;
static int csqc_poly_startvert; static int csqc_poly_startvert;
static int csqc_poly_startidx; static int csqc_poly_startidx;
@ -1780,8 +1787,27 @@ static void QCBUILTIN PF_cs_SetSize (pubprogfuncs_t *prinst, struct globalvars_s
World_LinkEdict (w, (wedict_t*)e, false); World_LinkEdict (w, (wedict_t*)e, false);
} }
static void cs_settracevars(trace_t *tr, struct globalvars_s *pr_globals) static void cs_settracevars(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals, trace_t *tr)
{ {
/*
world_t *w = prinst->parms->user;
*w->g.trace_allsolid = tr->allsolid;
*w->g.trace_startsolid = tr->startsolid;
*w->g.trace_fraction = tr->fraction;
*w->g.trace_inwater = tr->inwater;
*w->g.trace_inopen = tr->inopen;
VectorCopy (tr->endpos, w->g.trace_endpos);
VectorCopy (tr->plane.normal, w->g.trace_plane_normal);
*w->g.trace_plane_dist = tr->plane.dist;
if (w->g.trace_surfaceflags)
*w->g.trace_surfaceflags = tr->surface?tr->surface->flags:0;
if (w->g.trace_endcontents)
*w->g.trace_endcontents = tr->contents;
if (tr->ent)
*w->g.trace_ent = EDICT_TO_PROG(prinst, (void*)tr->ent);
else
*w->g.trace_ent = EDICT_TO_PROG(prinst, (void*)w->edicts);
*/
*csqcg.trace_allsolid = tr->allsolid; *csqcg.trace_allsolid = tr->allsolid;
*csqcg.trace_startsolid = tr->startsolid; *csqcg.trace_startsolid = tr->startsolid;
*csqcg.trace_fraction = tr->fraction; *csqcg.trace_fraction = tr->fraction;
@ -1829,7 +1855,7 @@ static void QCBUILTIN PF_cs_traceline(pubprogfuncs_t *prinst, struct globalvars_
trace = World_Move (&csqc_world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent); trace = World_Move (&csqc_world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent);
ent->xv->hull = savedhull; ent->xv->hull = savedhull;
cs_settracevars(&trace, pr_globals); cs_settracevars(prinst, pr_globals, &trace);
} }
static void QCBUILTIN PF_cs_tracebox(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_cs_tracebox(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
{ {
@ -1851,7 +1877,7 @@ static void QCBUILTIN PF_cs_tracebox(pubprogfuncs_t *prinst, struct globalvars_s
trace = World_Move (&csqc_world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent); trace = World_Move (&csqc_world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent);
ent->xv->hull = savedhull; ent->xv->hull = savedhull;
cs_settracevars(&trace, pr_globals); cs_settracevars(prinst, pr_globals, &trace);
} }
static trace_t CS_Trace_Toss (csqcedict_t *tossent, csqcedict_t *ignore) static trace_t CS_Trace_Toss (csqcedict_t *tossent, csqcedict_t *ignore)
@ -1909,7 +1935,7 @@ static void QCBUILTIN PF_cs_tracetoss (pubprogfuncs_t *prinst, struct globalvars
trace = CS_Trace_Toss (ent, ignore); trace = CS_Trace_Toss (ent, ignore);
cs_settracevars(&trace, pr_globals); cs_settracevars(prinst, pr_globals, &trace);
} }
static void QCBUILTIN PF_cs_pointcontents(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_cs_pointcontents(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)

View file

@ -285,7 +285,7 @@ void Q2BSP_FindTouchedLeafs(model_t *mod, struct pvscache_s *ent, float *mins, f
/*sv_move.c*/ /*sv_move.c*/
qboolean World_CheckBottom (world_t *world, wedict_t *ent, vec3_t up); qboolean World_CheckBottom (world_t *world, wedict_t *ent, vec3_t up);
qboolean World_movestep (world_t *world, wedict_t *ent, vec3_t move, vec3_t axis[3], qboolean relink, qboolean noenemy, void (*set_move_trace)(trace_t *trace, struct globalvars_s *pr_globals), struct globalvars_s *set_trace_globs); qboolean World_movestep (world_t *world, wedict_t *ent, vec3_t move, vec3_t axis[3], qboolean relink, qboolean noenemy, void (*set_move_trace)(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals, trace_t *trace), struct globalvars_s *set_trace_globs);
qboolean World_MoveToGoal (world_t *world, wedict_t *ent, float dist); qboolean World_MoveToGoal (world_t *world, wedict_t *ent, float dist);
qboolean World_GetEntGravityAxis(wedict_t *ent, vec3_t axis[3]); qboolean World_GetEntGravityAxis(wedict_t *ent, vec3_t axis[3]);

View file

@ -1358,7 +1358,8 @@ static void R_RenderMotionBlur(void)
#endif #endif
} }
#if 0 #if 1
#include "shader.h"
/*FIXME: we could use geometry shaders to draw to all 6 faces at once*/ /*FIXME: we could use geometry shaders to draw to all 6 faces at once*/
qboolean R_RenderScene_Cubemap(void) qboolean R_RenderScene_Cubemap(void)
{ {
@ -1431,7 +1432,7 @@ qboolean R_RenderScene_Cubemap(void)
// prect.y = (vrect.y * vid.pixelheight)/vid.height; // prect.y = (vrect.y * vid.pixelheight)/vid.height;
// prect.height = (vrect.height * vid.pixelheight)/vid.height; // prect.height = (vrect.height * vid.pixelheight)/vid.height;
if (r_config.texture_non_power_of_two_limited) if (sh_config.texture_non_power_of_two_pic)
{ {
if (prect.width < prect.height) if (prect.width < prect.height)
cmapsize = prect.width; cmapsize = prect.width;
@ -1453,7 +1454,7 @@ qboolean R_RenderScene_Cubemap(void)
{ {
if (!TEXVALID(scenepp_postproc_cube)) if (!TEXVALID(scenepp_postproc_cube))
{ {
scenepp_postproc_cube = Image_CreateTexture("***fish***", IF_CUBEMAP); scenepp_postproc_cube = Image_CreateTexture("***fish***", NULL, IF_CUBEMAP|IF_RENDERTARGET|IF_CLAMP|IF_LINEAR);
qglGenTextures(1, &scenepp_postproc_cube->num); qglGenTextures(1, &scenepp_postproc_cube->num);
} }
@ -1725,11 +1726,11 @@ void GLR_RenderView (void)
time1 = Sys_DoubleTime (); time1 = Sys_DoubleTime ();
} }
// if (!dofbo && !(r_refdef.flags & RDF_NOWORLDMODEL) && R_RenderScene_Cubemap()) if (!dofbo && !(r_refdef.flags & RDF_NOWORLDMODEL) && R_RenderScene_Cubemap())
// { {
//
// } }
// else else
{ {
GL_SetShaderState2D(false); GL_SetShaderState2D(false);

View file

@ -3086,7 +3086,7 @@ static void QCBUILTIN PF_LocalSound(pubprogfuncs_t *prinst, struct globalvars_s
#endif #endif
}; };
static void set_trace_globals(trace_t *trace, struct globalvars_s *pr_globals) static void set_trace_globals(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals, trace_t *trace)
{ {
pr_global_struct->trace_allsolid = trace->allsolid; pr_global_struct->trace_allsolid = trace->allsolid;
pr_global_struct->trace_startsolid = trace->startsolid; pr_global_struct->trace_startsolid = trace->startsolid;
@ -3157,7 +3157,7 @@ void QCBUILTIN PF_svtraceline (pubprogfuncs_t *prinst, struct globalvars_s *pr_g
trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent); trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent);
ent->xv->hull = savedhull; ent->xv->hull = savedhull;
set_trace_globals(&trace, pr_globals); set_trace_globals(prinst, pr_globals, &trace);
} }
#ifdef HEXEN2 #ifdef HEXEN2
@ -3181,7 +3181,7 @@ static void QCBUILTIN PF_traceboxh2 (pubprogfuncs_t *prinst, struct globalvars_s
trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent); trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent);
ent->xv->hull = savedhull; ent->xv->hull = savedhull;
set_trace_globals(&trace, pr_globals); set_trace_globals(prinst, pr_globals, &trace);
} }
#endif #endif
@ -3205,7 +3205,7 @@ static void QCBUILTIN PF_traceboxdp (pubprogfuncs_t *prinst, struct globalvars_s
trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent); trace = World_Move (&sv.world, v1, mins, maxs, v2, nomonsters, (wedict_t*)ent);
ent->xv->hull = savedhull; ent->xv->hull = savedhull;
set_trace_globals(&trace, pr_globals); set_trace_globals(prinst, pr_globals, &trace);
} }
static void QCBUILTIN PF_TraceToss (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals) static void QCBUILTIN PF_TraceToss (pubprogfuncs_t *prinst, struct globalvars_s *pr_globals)
@ -3221,7 +3221,7 @@ static void QCBUILTIN PF_TraceToss (pubprogfuncs_t *prinst, struct globalvars_s
trace = WPhys_Trace_Toss (&sv.world, (wedict_t*)ent, (wedict_t*)ignore); trace = WPhys_Trace_Toss (&sv.world, (wedict_t*)ent, (wedict_t*)ignore);
set_trace_globals(&trace, pr_globals); set_trace_globals(prinst, pr_globals, &trace);
} }
//============================================================================ //============================================================================
@ -5732,6 +5732,7 @@ void QCBUILTIN PF_sqlreadfloat (pubprogfuncs_t *prinst, struct globalvars_s *pr_
else else
{ {
Con_Printf("Invalid sql request/row\n"); Con_Printf("Invalid sql request/row\n");
PR_StackTrace(prinst, false);
} }
} }
} }

View file

@ -149,7 +149,7 @@ possible, no move is done, false is returned, and
pr_global_struct->trace_normal is set to the normal of the blocking wall pr_global_struct->trace_normal is set to the normal of the blocking wall
============= =============
*/ */
qboolean World_movestep (world_t *world, wedict_t *ent, vec3_t move, vec3_t axis[3], qboolean relink, qboolean noenemy, void (*set_move_trace)(trace_t *trace, struct globalvars_s *pr_globals), struct globalvars_s *set_trace_globs) qboolean World_movestep (world_t *world, wedict_t *ent, vec3_t move, vec3_t axis[3], qboolean relink, qboolean noenemy, void (*set_move_trace)(pubprogfuncs_t *prinst, struct globalvars_s *pr_globals, trace_t *trace), struct globalvars_s *set_trace_globs)
{ {
float dz; float dz;
vec3_t oldorg, neworg, end; vec3_t oldorg, neworg, end;
@ -199,7 +199,7 @@ qboolean World_movestep (world_t *world, wedict_t *ent, vec3_t move, vec3_t axis
} }
trace = World_Move (world, ent->v->origin, ent->v->mins, ent->v->maxs, neworg, false, ent); trace = World_Move (world, ent->v->origin, ent->v->mins, ent->v->maxs, neworg, false, ent);
if (set_move_trace) if (set_move_trace)
set_move_trace(&trace, set_trace_globs); set_move_trace(world->progs, set_trace_globs, &trace);
if (trace.fraction == 1) if (trace.fraction == 1)
{ {
@ -225,7 +225,7 @@ qboolean World_movestep (world_t *world, wedict_t *ent, vec3_t move, vec3_t axis
trace = World_Move (world, neworg, ent->v->mins, ent->v->maxs, end, false, ent); trace = World_Move (world, neworg, ent->v->mins, ent->v->maxs, end, false, ent);
if (set_move_trace) if (set_move_trace)
set_move_trace(&trace, set_trace_globs); set_move_trace(world->progs, set_trace_globs, &trace);
if (trace.allsolid) if (trace.allsolid)
return false; return false;
@ -236,7 +236,7 @@ qboolean World_movestep (world_t *world, wedict_t *ent, vec3_t move, vec3_t axis
VectorMA(neworg, -movevars.stepheight, axis[2], neworg); VectorMA(neworg, -movevars.stepheight, axis[2], neworg);
trace = World_Move (world, neworg, ent->v->mins, ent->v->maxs, end, false, ent); trace = World_Move (world, neworg, ent->v->mins, ent->v->maxs, end, false, ent);
if (set_move_trace) if (set_move_trace)
set_move_trace(&trace, set_trace_globs); set_move_trace(world->progs, set_trace_globs, &trace);
if (trace.allsolid || trace.startsolid) if (trace.allsolid || trace.startsolid)
return false; return false;
} }

View file

@ -558,10 +558,10 @@ static void SQL_DeallocResult(sqlserver_t *server, queryresult_t *qres)
case SQLDRV_SQLITE: case SQLDRV_SQLITE:
if (qres->result) if (qres->result)
{ {
char **mat = qres->result; sqliteresult_t *mat = qres->result;
int i; int i;
for (i = 0; i < qres->columns * (qres->rows+1); i++) for (i = 0; i < qres->columns * (qres->rows+1); i++)
free(mat[i]); free(mat[i].ptr);
} }
break; break;
#endif #endif

View file

@ -1120,7 +1120,7 @@ void SV_SendClientPrespawnInfo(client_t *client)
if (client->prespawn_idx >= client->maxmodels || !sv.strings.model_precache[client->prespawn_idx]) if (client->prespawn_idx >= client->maxmodels || !sv.strings.model_precache[client->prespawn_idx])
{ {
if (*sv.strings.model_precache[client->prespawn_idx] && !(client->plimitwarned & PLIMIT_MODELS)) if (sv.strings.model_precache[client->prespawn_idx] && !(client->plimitwarned & PLIMIT_MODELS))
{ {
client->plimitwarned |= PLIMIT_MODELS; client->plimitwarned |= PLIMIT_MODELS;
SV_ClientPrintf(client, PRINT_HIGH, "WARNING: Your client's network protocol only supports %i models. Please upgrade or enable extensions.\n", client->prespawn_idx); SV_ClientPrintf(client, PRINT_HIGH, "WARNING: Your client's network protocol only supports %i models. Please upgrade or enable extensions.\n", client->prespawn_idx);