converted S_Update to take a matrix, and internal snd_dma functions to use that matri...
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 10 Aug 2004 02:12:41 +0000 (02:12 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Tue, 10 Aug 2004 02:12:41 +0000 (02:12 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@4329 d7cf8633-e32d-0410-b094-e92efae38249

host.c
snd_dma.c
snd_null.c
sound.h

diff --git a/host.c b/host.c
index 311752b..513afcc 100644 (file)
--- 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();
 
index cf3c42b..486d03f 100644 (file)
--- 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;
        }
index d63f307..df43df4 100755 (executable)
@@ -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 dbfc892..ecbdb78 100644 (file)
--- 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);