/* ================ SV_Shutdown Called when each game quits, before Sys_Quit or Sys_Error ================ */ void SV_Shutdown( char *finalmsg ) { int i; if ( !com_sv_running || !com_sv_running->integer ) { return; } //Com_Printf( "----- Server Shutdown -----\n" ); if ( svs.clients && !com_errorEntered ) { SV_FinalMessage( finalmsg ); } SV_RemoveOperatorCommands(); SV_ShutdownGameProgs(qfalse); if (svs.snapshotEntities) { Z_Free(svs.snapshotEntities); svs.snapshotEntities = NULL; } for ( i = 0 ; i < MAX_CONFIGSTRINGS ; i++ ) { if ( sv.configstrings[i] ) { Z_Free( sv.configstrings[i] ); } } // free current level memset( &sv, 0, sizeof( sv ) ); // free server static data if ( svs.clients ) { SV_FreeClient(svs.clients); Z_Free( svs.clients ); } memset( &svs, 0, sizeof( svs ) ); // Ensure we free any memory used by the leaf cache. CM_CleanLeafCache(); Cvar_Set( "sv_running", "0" ); //Com_Printf( "---------------------------\n" ); }
/* ================ SV_Shutdown Called when each game quits, before Sys_Quit or Sys_Error ================ */ void SV_Shutdown( char *finalmsg ) { if ( !com_sv_running || !com_sv_running->integer ) { return; } Com_Printf( "----- Server Shutdown -----\n" ); if ( svs.clients && !com_errorEntered ) { SV_FinalMessage( finalmsg ); } SV_RemoveOperatorCommands(); SV_ShutdownGameProgs(); if (svs.snapshotEntities) { Z_Free(svs.snapshotEntities); svs.snapshotEntities = NULL; } // remove allocated space for ghoul2 game side model transforms delete G2VertSpaceServer; G2VertSpaceServer = NULL; // free current level memset( &sv, 0, sizeof( sv ) ); // free server static data if ( svs.clients ) { Z_Free( svs.clients ); } memset( &svs, 0, sizeof( svs ) ); // Ensure we free any memory used by the leaf cache. CM_CleanLeafCache(); Cvar_Set( "sv_running", "0" ); Com_Printf( "---------------------------\n" ); }
void R_Init( void ) { int err; int i; //VID_Printf( PRINT_ALL, "----- R_Init -----\n" ); #ifdef _XBOX extern qboolean vidRestartReloadMap; if (!vidRestartReloadMap) { Hunk_Clear(); extern void CM_Free(void); CM_Free(); void CM_CleanLeafCache(void); CM_CleanLeafCache(); } #endif ShaderEntryPtrs_Clear(); #ifdef _XBOX //Save visibility info as it has already been set. SPARC<byte> *vis = tr.externalVisData; #endif // clear all our internal state memset( &tr, 0, sizeof( tr ) ); memset( &backEnd, 0, sizeof( backEnd ) ); memset( &tess, 0, sizeof( tess ) ); #ifdef _XBOX //Restore visibility info. tr.externalVisData = vis; #endif Swap_Init(); #ifndef FINAL_BUILD if ( (int)tess.xyz & 15 ) { Com_Printf( "WARNING: tess.xyz not 16 byte aligned (%x)\n",(int)tess.xyz & 15 ); } #endif // // init function tables // for ( i = 0; i < FUNCTABLE_SIZE; i++ ) { tr.sinTable[i] = sin( DEG2RAD( i * 360.0f / ( ( float ) ( FUNCTABLE_SIZE - 1 ) ) ) ); tr.squareTable[i] = ( i < FUNCTABLE_SIZE/2 ) ? 1.0f : -1.0f; tr.sawToothTable[i] = (float)i / FUNCTABLE_SIZE; tr.inverseSawToothTable[i] = 1.0 - tr.sawToothTable[i]; if ( i < FUNCTABLE_SIZE / 2 ) { if ( i < FUNCTABLE_SIZE / 4 ) { tr.triangleTable[i] = ( float ) i / ( FUNCTABLE_SIZE / 4 ); } else { tr.triangleTable[i] = 1.0f - tr.triangleTable[i-FUNCTABLE_SIZE / 4]; } } else { tr.triangleTable[i] = -tr.triangleTable[i-FUNCTABLE_SIZE/2]; } } R_InitFogTable(); R_NoiseInit(); R_Register(); backEndData = (backEndData_t *) Hunk_Alloc( sizeof( backEndData_t ), qtrue ); R_ToggleSmpFrame(); //r_smp const color4ub_t color = {0xff, 0xff, 0xff, 0xff}; for(i=0;i<MAX_LIGHT_STYLES;i++) { RE_SetLightStyle(i, *(int*)color); } InitOpenGL(); R_InitImages(); R_InitShaders(); R_InitSkins(); #ifndef _XBOX R_TerrainInit(); #endif R_ModelInit(); // R_InitWorldEffects(); R_InitFonts(); err = qglGetError(); if ( err != GL_NO_ERROR ) VID_Printf (PRINT_ALL, "glGetError() = 0x%x\n", err); //VID_Printf( PRINT_ALL, "----- finished R_Init -----\n" ); }