From 088a68a8be2d6b426f4d2046a3f02c14466edcc9 Mon Sep 17 00:00:00 2001 From: havoc Date: Tue, 10 Aug 2004 02:12:41 +0000 Subject: [PATCH] converted S_Update to take a matrix, and internal snd_dma functions to use that matrix where applicable (only spatialization) git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@4329 d7cf8633-e32d-0410-b094-e92efae38249 --- host.c | 6 ++---- snd_dma.c | 22 +++++++++------------- snd_null.c | 2 +- sound.h | 4 +++- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/host.c b/host.c index 311752bc..513afcc8 100644 --- a/host.c +++ b/host.c @@ -762,12 +762,10 @@ void _Host_Frame (float time) if (cls.signon == SIGNONS && cl.viewentity >= 0 && cl.viewentity < MAX_EDICTS && cl_entities[cl.viewentity].state_current.active) { // LordHavoc: this used to use renderer variables (eww) - vec3_t forward, left, up, origin; - Matrix4x4_ToVectors(&cl_entities[cl.viewentity].render.matrix, forward, left, up, origin); - S_Update(origin, forward, left, up); + S_Update(&cl_entities[cl.viewentity].render.matrix); } else - S_Update(vec3_origin, vec3_origin, vec3_origin, vec3_origin); + S_Update(&identitymatrix); CDAudio_Update(); diff --git a/snd_dma.c b/snd_dma.c index cf3c42bf..486d03f1 100644 --- a/snd_dma.c +++ b/snd_dma.c @@ -58,10 +58,8 @@ cvar_t snd_streaming = { CVAR_SAVE, "snd_streaming", "1"}; volatile dma_t *shm = 0; volatile dma_t sn; -vec3_t listener_vieworigin; -vec3_t listener_viewforward; -vec3_t listener_viewleft; -vec3_t listener_viewup; +vec3_t listener_origin; +matrix4x4_t listener_matrix; vec_t sound_nominal_clip_dist=1000.0; mempool_t *snd_mempool; @@ -485,12 +483,12 @@ void SND_Spatialize(channel_t *ch, int isstatic) } // calculate stereo seperation and distance attenuation - VectorSubtract(ch->origin, listener_vieworigin, source_vec); + Matrix4x4_Transform(&listener_matrix, ch->origin, source_vec); dist = VectorNormalizeLength(source_vec); // distance scale = ch->master_vol * (1.0 - (dist * ch->dist_mult)); // panning - pan = scale * DotProduct(listener_viewleft, source_vec); + pan = scale * source_vec[0]; // calculate the volumes ch->leftvol = (int) (scale + pan); ch->rightvol = (int) (scale - pan); @@ -803,7 +801,7 @@ void S_UpdateAmbientSounds (void) if (ambient_level.value <= 0 || !cl.worldmodel || !cl.worldmodel->brush.AmbientSoundLevelsForPoint) return; - cl.worldmodel->brush.AmbientSoundLevelsForPoint(cl.worldmodel, listener_vieworigin, ambientlevels, sizeof(ambientlevels)); + cl.worldmodel->brush.AmbientSoundLevelsForPoint(cl.worldmodel, listener_origin, ambientlevels, sizeof(ambientlevels)); // calc ambient sound levels for (ambient_channel = 0 ; ambient_channel< NUM_AMBIENTS ; ambient_channel++) @@ -845,7 +843,7 @@ S_Update Called once each time through the main loop ============ */ -void S_Update(vec3_t origin, vec3_t forward, vec3_t left, vec3_t up) +void S_Update(const matrix4x4_t *listenermatrix) { unsigned int i, j, total; channel_t *ch, *combine; @@ -853,10 +851,8 @@ void S_Update(vec3_t origin, vec3_t forward, vec3_t left, vec3_t up) if (!snd_initialized.integer || (snd_blocked > 0)) return; - VectorCopy(origin, listener_vieworigin); - VectorCopy(forward, listener_viewforward); - VectorCopy(left, listener_viewleft); - VectorCopy(up, listener_viewup); + listener_matrix = *listenermatrix; + Matrix4x4_OriginFromMatrix(&listener_matrix, listener_origin); // update general area ambient sound sources S_UpdateAmbientSounds (); @@ -1045,7 +1041,7 @@ static void S_Play_Common(float fvol, float attenuation) else i++; - ch_ind = S_StartSound(-1, 0, sfx, listener_vieworigin, fvol, attenuation); + ch_ind = S_StartSound(-1, 0, sfx, listener_origin, fvol, attenuation); if (ch_ind >= 0) channels[ch_ind].flags |= CHANNELFLAG_LOCALSOUND; } diff --git a/snd_null.c b/snd_null.c index d63f307d..df43df4f 100755 --- a/snd_null.c +++ b/snd_null.c @@ -103,7 +103,7 @@ sfx_t *S_PrecacheSound (const char *sample, qboolean complain, qboolean stdpath) return NULL; } -void S_Update(vec3_t origin, vec3_t forward, vec3_t left, vec3_t up) +void S_Update(const matrix4x4_t *matrix) { } diff --git a/sound.h b/sound.h index dbfc8923..ecbdb78a 100644 --- a/sound.h +++ b/sound.h @@ -22,6 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef SOUND_H #define SOUND_H +#include "matrixlib.h" + //AK: TODO: find a better solution instead of using a define #if defined( _WIN32 ) && !defined( USE_SDL ) # define USE_DSOUND @@ -118,7 +120,7 @@ void S_StopAllSounds(qboolean clear); void S_PauseGameSounds (void); void S_ResumeGameSounds (void); void S_SetChannelVolume (unsigned int ch_ind, float fvol); -void S_Update(vec3_t origin, vec3_t forward, vec3_t left, vec3_t up); +void S_Update(const matrix4x4_t *listenermatrix); void S_ExtraUpdate (void); sfx_t *S_GetCached(const char *name, qboolean stdpath); -- 2.39.2