/* ================ CL_TestEntities if cl_testentities is set, create 32 player models ================ */ void CL_TestEntities( void ) { int i, j; float f, r; edict_t ent, *pl; if( !cl_testentities->integer ) return; pl = CL_GetLocalPlayer(); Mem_Set( &ent, 0, sizeof( edict_t )); V_ClearScene(); for( i = 0; i < 32; i++ ) { r = 64 * ((i%4) - 1.5 ); f = 64 * (i/4) + 128; for( j = 0; j < 3; j++ ) ent.v.origin[j] = cl.refdef.vieworg[j]+cl.refdef.forward[j] * f + cl.refdef.right[j] * r; ent.v.scale = 1.0f; ent.serialnumber = pl->serialnumber; ent.v.controller[0] = ent.v.controller[1] = 90.0f; ent.v.controller[2] = ent.v.controller[3] = 180.0f; ent.v.modelindex = pl->v.modelindex; re->AddRefEntity( &ent, ED_NORMAL, -1 ); } }
void V_NewMap (void) { v_iyaw_cycle = 2; v_iroll_cycle = 0.5; v_ipitch_cycle = 1; v_iyaw_level = 0.3; v_iroll_level = 0.1; v_ipitch_level = 0.3; v_idlescale = 0; v_dmg_time = 0; v_dmg_roll = 0; v_dmg_pitch = 0; V_ClearScene(); }
bool V_RenderView() { guard(V_RenderView); if (cls.state != ca_active) return false; if (!cl.rendererReady) return false; // still loading if (!bspfile.clientLoaded) return false; // map already unloaded (by server), but client is still active (ca_active) if (timedemo->integer) { static unsigned lastTime = 0; unsigned time = appMilliseconds(); if (!cl.timedemoStart) { cl.timedemoStart = time; // cl.timedemoLongestFrame = 0; -- cleared anyway within a new server map // cl.timedemoFrames = 0; } else { unsigned timeDelta = time - lastTime; if (timeDelta > cl.timedemoLongestFrame) //?? && !fileFromPak) cl.timedemoLongestFrame = timeDelta; } lastTime = time; cl.timedemoFrames++; } #if PROFILE_VIEW unsigned beforePrep = 0, beforeDebug = 0, beforeEffects = 0, afterEffects = 0, beforeRender, afterRender; #endif // an invalid frame will just use the exact previous refdef // we can't use the old frame if the video mode has changed, though... if (cl.frame.valid && (cl.forceViewFrame || !cl_paused->integer)) { PRF(beforePrep = appCycles()); cl.forceViewFrame = false; CalcVrect(); TileClear(); V_ClearScene(); cl.refdef.rdflags = cl.frame.playerstate.rdflags; // build a renderer entity list and calc cl.sim* // this also calls CL_CalcViewValues which loads // v_forward, etc. CL_AddEntities(); PRF(beforeEffects = appCycles()); CL_AddEffects(); PRF(afterEffects = appCycles()); CL_AddTEnts(); #if !NO_DEBUG if (cl_testentities->integer) TestEntities(); if (cl_testlights->integer) TestLights(); if (cl_testblend->integer) { r_blend[0] = 1; r_blend[1] = 0.5; r_blend[2] = 0.25; r_blend[3] = 0.5; } // debug output // free debug memory from previous frame if (debugMem) { delete debugMem; debugMem = NULL; } PRF(beforeDebug = appCycles()); if (r_playerpos->integer) DrawOriginInfo(); if (r_surfinfo->integer) DrawSurfInfo(); DrawBrush(); #endif // NO_DEBUG #if 0 // never let it sit exactly on a node line, because a water plane can // dissapear when viewed with the eye exactly on it. // the server protocol only specifies to 1/8 pixel, so add 1/16 in each axis cl.refdef.vieworg[0] += 1.0f/16; //?? cl.refdef.vieworg[1] += 1.0f/16; cl.refdef.vieworg[2] += 1.0f/16; #endif cl.refdef.x = scr_vrect.x; cl.refdef.y = scr_vrect.y; cl.refdef.width = scr_vrect.width; cl.refdef.height = scr_vrect.height; cl.refdef.fov_y = CalcFov(cl.refdef.fov_x, cl.refdef.width, cl.refdef.height); cl.refdef.time = cl.ftime; cl.refdef.zonebits = cl.frame.zonebits; if (!cl_add_entities->integer) r_numentities = 0; if (!cl_add_lights->integer) r_numdlights = 0; if (!cl_add_blend->integer || cl.refdef.rdflags & RDF_THIRD_PERSON) r_blend[3] = 0; cl.refdef.num_entities = r_numentities; cl.refdef.entities = r_entities; cl.refdef.particles = cl_add_particles->integer ? active_particles : NULL; cl.refdef.beams = active_beams; cl.refdef.num_dlights = r_numdlights; cl.refdef.dlights = r_dlights; cl.refdef.lightstyles = cl_lightstyles; // underwater fov warp (taken from Q3 game source) if (cl.refdef.rdflags & RDF_UNDERWATER) { float v = sin(cl.ftime * 0.4f * M_PI * 2); cl.refdef.fov_x += v; cl.refdef.fov_y -= v; } FixWaterVis(); } PRF(beforeRender = appCycles()); // render scene RE_RenderFrame(&cl.refdef); PRF(afterRender = appCycles()); // add full-screen blend if (r_blend[3]) RE_Fill(cl.refdef.x, cl.refdef.y, cl.refdef.width, cl.refdef.height, RGBAS(r_blend[0], r_blend[1], r_blend[2], r_blend[3])); #if PROFILE_VIEW RE_DrawTextLeft(va("V: prep1: %5.2f fx: %5.2f prep2: %5.2f dbg: %5.2f render: %5.2f", appCyclesToMsecf(beforeEffects - beforePrep), appCyclesToMsecf(afterEffects - beforeEffects), appCyclesToMsecf(beforeDebug - afterEffects), appCyclesToMsecf(beforeRender - beforeDebug), appCyclesToMsecf(afterRender - beforeRender)), RGB(0.2,1,0.2)); #endif // stats if (r_drawfps->integer) DrawFpsInfo(); return true; unguard; }