From 2a3eff4ff6877f1302f54f814df940dbc88f5495 Mon Sep 17 00:00:00 2001 From: molivier Date: Tue, 10 Feb 2004 07:14:03 +0000 Subject: [PATCH] Added a couple of function skeletons for the automatic unloading of unused sounds (coming very soon). Removed the empty functions S_BeginPrecaching, S_EndPrecaching and S_ClearPrecache. I broke the "silentlymissing" sound flag recently, it could be set even if the sound was successfully loaded (this flag doesn't seem to be used in any active part of the code, but until I sort this out it's better to have it right); anyhow it's fixed now. Switched "silentlymissing"'s type to "qboolean" in the process. Fixed an implicit conversion warning when calling Sys_Sleep in MSVC6. git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3884 d7cf8633-e32d-0410-b094-e92efae38249 --- cl_parse.c | 8 ++++---- host.c | 2 +- snd_dma.c | 43 +++++++++++++++++++++++++++---------------- snd_mem.c | 3 +-- snd_null.c | 12 ------------ sound.h | 7 +++---- 6 files changed, 36 insertions(+), 39 deletions(-) diff --git a/cl_parse.c b/cl_parse.c index dfe44a98..45a8587b 100644 --- a/cl_parse.c +++ b/cl_parse.c @@ -405,14 +405,16 @@ void CL_ParseServerInfo (void) CL_KeepaliveMessage(); Mod_TouchModel(parse_model_precache[i]); } + Mod_PurgeUnused(); + // do the same for sounds + S_ClearUsed(); for (i = 1;i < numsounds;i++) { CL_KeepaliveMessage(); S_TouchSound(parse_sound_precache[i]); } - // purge anything that was not touched - Mod_PurgeUnused(); + S_PurgeUnused(); // now we try to load everything that is new @@ -431,13 +433,11 @@ void CL_ParseServerInfo (void) } // sounds - S_BeginPrecaching (); for (i=1 ; i= 0.02) - Sys_Sleep(timeleft * 1000 - 5); + Sys_Sleep((int)(timeleft * 1000) - 5); return false; } } diff --git a/snd_dma.c b/snd_dma.c index 59f44628..0c785bcc 100644 --- a/snd_dma.c +++ b/snd_dma.c @@ -275,7 +275,7 @@ void S_Init(void) /* ========= -S_IsCached +S_GetCached ========= */ @@ -343,8 +343,34 @@ S_TouchSound void S_TouchSound (char *name) { S_FindName(name); + // TODO: set the "used" flag for this sound } + +/* +================== +S_ClearUsed + +================== +*/ +void S_ClearUsed (void) +{ + // TODO: reset the "used" flag of all precached sounds +} + + +/* +================== +S_PurgeUnused + +================== +*/ +void S_PurgeUnused (void) +{ + // TODO: free all precached sounds without the "used" flag +} + + /* ================== S_PrecacheSound @@ -988,21 +1014,6 @@ void S_LocalSound (char *sound) } -void S_ClearPrecache (void) -{ -} - - -void S_BeginPrecaching (void) -{ -} - - -void S_EndPrecaching (void) -{ -} - - #define RAWSAMPLESBUFFER 32768 short s_rawsamplesbuffer[RAWSAMPLESBUFFER * 2]; int s_rawsamplesbuffer_start; diff --git a/snd_mem.c b/snd_mem.c index 4e9f5cb5..5eb13038 100644 --- a/snd_mem.c +++ b/snd_mem.c @@ -285,8 +285,6 @@ sfxcache_t *S_LoadSound (sfx_t *s, int complain) if (s->sfxcache && (s->sfxcache->speed == shm->speed)) return s->sfxcache; - s->silentlymissing = !complain; - len = snprintf (namebuffer, sizeof (namebuffer), "sound/%s", s->name); if (len >= sizeof (namebuffer)) return NULL; @@ -307,6 +305,7 @@ sfxcache_t *S_LoadSound (sfx_t *s, int complain) return sc; // Can't load the sound! + s->silentlymissing = !complain; if (complain) { if (modified_name) diff --git a/snd_null.c b/snd_null.c index b8627b92..68e0171a 100755 --- a/snd_null.c +++ b/snd_null.c @@ -82,10 +82,6 @@ sfx_t *S_PrecacheSound (char *sample, int complain) return NULL; } -void S_ClearPrecache (void) -{ -} - void S_Update(vec3_t origin, vec3_t forward, vec3_t left, vec3_t up) { } @@ -94,14 +90,6 @@ void S_StopAllSounds (qboolean clear) { } -void S_BeginPrecaching (void) -{ -} - -void S_EndPrecaching (void) -{ -} - void S_ExtraUpdate (void) { } diff --git a/sound.h b/sound.h index e0ef6c73..d0c8418c 100644 --- a/sound.h +++ b/sound.h @@ -46,7 +46,7 @@ typedef struct sfx_s char name[MAX_QPATH]; mempool_t *mempool; sfxcache_t *sfxcache; - int silentlymissing; // true if missing and loaded with complain = false + qboolean silentlymissing; // true if missing and loaded with complain = false } sfx_t; typedef struct @@ -100,9 +100,8 @@ void S_ExtraUpdate (void); sfx_t *S_GetCached(const char *name); sfx_t *S_PrecacheSound (char *sample, int complain); void S_TouchSound (char *sample); -void S_ClearPrecache (void); -void S_BeginPrecaching (void); -void S_EndPrecaching (void); +void S_ClearUsed (void); +void S_PurgeUnused (void); void S_PaintChannels(int endtime); void S_InitPaintChannels (void); -- 2.39.2