X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=cl_main.c;h=00e88da6563910726c3885f12709fb243681b151;hb=94a5be97432b0a538c0200cd0c837253b65633bf;hp=cc3315f2c9414f2b77a50626244cac16da3d352a;hpb=52af5c65f59560607371cbdb250acc29aae4eaef;p=xonotic%2Fdarkplaces.git diff --git a/cl_main.c b/cl_main.c index cc3315f2..00e88da6 100644 --- a/cl_main.c +++ b/cl_main.c @@ -416,6 +416,10 @@ void CL_EstablishConnection(const char *host, int firstarg) if (cls.state == ca_dedicated) return; + // don't connect to a server if we're benchmarking a demo + if (COM_CheckParm("-benchmark")) + return; + // clear menu's connect error message M_Update_Return_Reason(""); cls.demonum = -1; @@ -630,6 +634,14 @@ static float CL_LerpPoint(void) void CL_ClearTempEntities (void) { r_refdef.scene.numtempentities = 0; + // grow tempentities buffer on request + if (r_refdef.scene.expandtempentities) + { + Con_Printf("CL_NewTempEntity: grow maxtempentities from %i to %i\n", r_refdef.scene.maxtempentities, r_refdef.scene.maxtempentities * 2); + r_refdef.scene.maxtempentities *= 2; + r_refdef.scene.tempentities = (entity_render_t *)Mem_Realloc(cls.permanentmempool, r_refdef.scene.tempentities, sizeof(entity_render_t) * r_refdef.scene.maxtempentities); + r_refdef.scene.expandtempentities = false; + } } entity_render_t *CL_NewTempEntity(double shadertime) @@ -639,7 +651,10 @@ entity_render_t *CL_NewTempEntity(double shadertime) if (r_refdef.scene.numentities >= r_refdef.scene.maxentities) return NULL; if (r_refdef.scene.numtempentities >= r_refdef.scene.maxtempentities) + { + r_refdef.scene.expandtempentities = true; // will be reallocated next frame since current frame may have pointers set already return NULL; + } render = &r_refdef.scene.tempentities[r_refdef.scene.numtempentities++]; memset (render, 0, sizeof(*render)); r_refdef.scene.entities[r_refdef.scene.numentities++] = render; @@ -892,7 +907,8 @@ void CL_AddQWCTFFlagModel(entity_t *player, int skin) CL_UpdateRenderEntity(flagrender); } -matrix4x4_t viewmodelmatrix; +matrix4x4_t viewmodelmatrix_withbob; +matrix4x4_t viewmodelmatrix_nobob; static const vec3_t muzzleflashorigin = {18, 0, 0}; @@ -995,9 +1011,9 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat { // view-relative entity (guns and such) if (e->render.effects & EF_NOGUNBOB) - matrix = &r_refdef.view.matrix; // really attached to view + matrix = &viewmodelmatrix_nobob; // really attached to view else - matrix = &viewmodelmatrix; // attached to gun bob matrix + matrix = &viewmodelmatrix_withbob; // attached to gun bob matrix } else { @@ -1083,7 +1099,17 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat } // animation lerp - if (e->render.framegroupblend[0].frame == frame) + e->render.skeleton = NULL; + if (e->render.flags & RENDER_COMPLEXANIMATION) + { + e->render.framegroupblend[0] = e->state_current.framegroupblend[0]; + e->render.framegroupblend[1] = e->state_current.framegroupblend[1]; + e->render.framegroupblend[2] = e->state_current.framegroupblend[2]; + e->render.framegroupblend[3] = e->state_current.framegroupblend[3]; + if (e->state_current.skeletonobject.model && e->state_current.skeletonobject.relativetransforms) + e->render.skeleton = &e->state_current.skeletonobject; + } + else if (e->render.framegroupblend[0].frame == frame) { // update frame lerp fraction e->render.framegroupblend[0].lerp = 1; @@ -1881,7 +1907,7 @@ void CL_UpdateWorld(void) r_refdef.scene.numlights = 0; r_refdef.view.matrix = identitymatrix; r_refdef.view.quality = 1; - + cl.num_brushmodel_entities = 0; if (cls.state == ca_connected && cls.signon == SIGNONS) @@ -2361,7 +2387,6 @@ CL_Init */ void CL_Init (void) { - int i; cls.levelmempool = Mem_AllocPool("client (per-level memory)", 0, NULL); cls.permanentmempool = Mem_AllocPool("client (long term memory)", 0, NULL); @@ -2372,12 +2397,7 @@ void CL_Init (void) r_refdef.scene.entities = (entity_render_t **)Mem_Alloc(cls.permanentmempool, sizeof(entity_render_t *) * r_refdef.scene.maxentities); // max temp entities - // FIXME: make this grow - i = COM_CheckParm("-maxtempents"); - if (i) - r_refdef.scene.maxtempentities = atof(com_argv[i + 1]); - else - r_refdef.scene.maxtempentities = MAX_TEMPENTITIES; + r_refdef.scene.maxtempentities = MAX_TEMPENTITIES; r_refdef.scene.tempentities = (entity_render_t *)Mem_Alloc(cls.permanentmempool, sizeof(entity_render_t) * r_refdef.scene.maxtempentities); CL_InitInput ();