X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=snd_main.h;h=0248a92cf54cd1317da2b082ff08ed08ea54a673;hb=0960e4f6c7b5cd1e00117a67acdebda21b2e95dd;hp=aa36d0154381f954cd57fc86e7b6fe83c8bf3e86;hpb=90a6130a618f72bef104521840169b03d1cc7794;p=xonotic%2Fdarkplaces.git diff --git a/snd_main.h b/snd_main.h index aa36d015..0248a92c 100644 --- a/snd_main.h +++ b/snd_main.h @@ -26,8 +26,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. typedef struct { - size_t length; - size_t offset; + unsigned int length; + unsigned int offset; qbyte data[4]; // variable sized } sfxbuffer_t; @@ -43,7 +43,7 @@ typedef struct #define SFXFLAG_FILEMISSING (1 << 0) // wasn't able to load the associated sound file #define SFXFLAG_SERVERSOUND (1 << 1) // the sfx is part of the server precache list #define SFXFLAG_STREAMED (1 << 2) // informative only. You shouldn't need to know that -#define SFXFLAG_PERMANENT (1 << 3) // the sfx is used by the client code and should not be purged (even if it is also in the server precache list) +#define SFXFLAG_PERMANENTLOCK (1 << 3) // can never be freed (ex: used by the client code) typedef struct snd_fetcher_s snd_fetcher_t; struct sfx_s @@ -51,13 +51,15 @@ struct sfx_s char name[MAX_QPATH]; sfx_t *next; mempool_t *mempool; - unsigned int locks; // A locked sfx_t must not be freed. - // Locks are added by S_PrecacheSound and S_ServerSounds. - // SFX can be freed by S_UnlockSfx or S_ServerSounds. + int locks; // One lock is automatically granted while the sfx is + // playing (and removed when stopped). Locks can also be + // added by S_PrecacheSound and S_ServerSounds. + // A SFX with no lock and no SFXFLAG_PERMANENTLOCK is + // freed at level change by S_ServerSounds. unsigned int flags; // cf SFXFLAG_* defines snd_format_t format; int loopstart; - size_t total_length; + unsigned int total_length; const snd_fetcher_t *fetcher; void *fetcher_data; // Per-sfx data for the sound fetching functions }; @@ -112,6 +114,9 @@ void SNDDMA_Shutdown(void); qboolean S_LoadSound (sfx_t *s, qboolean complain); void S_UnloadSound(sfx_t *s); +void S_LockSfx (sfx_t *sfx); +void S_UnlockSfx (sfx_t *sfx); + void *S_LockBuffer(void); void S_UnlockBuffer(void);