aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2011-08-31 02:18:16 -0700
committerChris Robinson <[email protected]>2011-08-31 02:18:16 -0700
commitb28f48c1bdf343ecc0a3e1dbed958b13fbba32e7 (patch)
tree36949865561b5f06b0d39569e47b807d94e9931d /OpenAL32
parent49e2fa428fced4d2ab1e390ad3397dd9e11df960 (diff)
Store the filter gains directly in the source instead of duplicate filter objects
Diffstat (limited to 'OpenAL32')
-rw-r--r--OpenAL32/Include/alSource.h6
-rw-r--r--OpenAL32/alSource.c32
2 files changed, 26 insertions, 12 deletions
diff --git a/OpenAL32/Include/alSource.h b/OpenAL32/Include/alSource.h
index 5f2ba610..920de683 100644
--- a/OpenAL32/Include/alSource.h
+++ b/OpenAL32/Include/alSource.h
@@ -59,11 +59,13 @@ typedef struct ALsource
ALuint BuffersInQueue; // Number of buffers in queue
ALuint BuffersPlayed; // Number of buffers played on this loop
- ALfilter DirectFilter;
+ ALfloat DirectGain;
+ ALfloat DirectGainHF;
struct {
struct ALeffectslot *Slot;
- ALfilter WetFilter;
+ ALfloat WetGain;
+ ALfloat WetGainHF;
} Send[MAX_SENDS];
ALboolean DryGainHFAuto;
diff --git a/OpenAL32/alSource.c b/OpenAL32/alSource.c
index 93000472..271d7e44 100644
--- a/OpenAL32/alSource.c
+++ b/OpenAL32/alSource.c
@@ -653,11 +653,14 @@ AL_API ALvoid AL_APIENTRY alSourcei(ALuint source,ALenum eParam,ALint lValue)
{
if(!filter)
{
- Source->DirectFilter.type = AL_FILTER_NULL;
- Source->DirectFilter.filter = 0;
+ Source->DirectGain = 1.0f;
+ Source->DirectGainHF = 1.0f;
}
else
- memcpy(&Source->DirectFilter, filter, sizeof(*filter));
+ {
+ Source->DirectGain = filter->Gain;
+ Source->DirectGainHF = filter->GainHF;
+ }
Source->NeedsUpdate = AL_TRUE;
}
else
@@ -777,11 +780,14 @@ AL_API void AL_APIENTRY alSource3i(ALuint source, ALenum eParam, ALint lValue1,
if(!ALFilter)
{
/* Disable filter */
- Source->Send[lValue2].WetFilter.type = 0;
- Source->Send[lValue2].WetFilter.filter = 0;
+ Source->Send[lValue2].WetGain = 1.0f;
+ Source->Send[lValue2].WetGainHF = 1.0f;
}
else
- memcpy(&Source->Send[lValue2].WetFilter, ALFilter, sizeof(*ALFilter));
+ {
+ Source->Send[lValue2].WetGain = ALFilter->Gain;
+ Source->Send[lValue2].WetGainHF = ALFilter->GainHF;
+ }
Source->NeedsUpdate = AL_TRUE;
}
else
@@ -1166,10 +1172,6 @@ AL_API ALvoid AL_APIENTRY alGetSourcei(ALuint source, ALenum eParam, ALint *plVa
*plValue = (ALint)Offsets[0];
break;
- case AL_DIRECT_FILTER:
- *plValue = Source->DirectFilter.filter;
- break;
-
case AL_DIRECT_FILTER_GAINHF_AUTO:
*plValue = Source->DryGainHFAuto;
break;
@@ -1741,6 +1743,8 @@ done:
static ALvoid InitSourceParams(ALsource *Source)
{
+ ALuint i;
+
Source->flInnerAngle = 360.0f;
Source->flOuterAngle = 360.0f;
Source->flPitch = 1.0f;
@@ -1780,6 +1784,14 @@ static ALvoid InitSourceParams(ALsource *Source)
Source->lSourceType = AL_UNDETERMINED;
Source->lOffset = -1;
+ Source->DirectGain = 1.0f;
+ Source->DirectGainHF = 1.0f;
+ for(i = 0;i < MAX_SENDS;i++)
+ {
+ Source->Send[i].WetGain = 1.0f;
+ Source->Send[i].WetGainHF = 1.0f;
+ }
+
Source->NeedsUpdate = AL_TRUE;
Source->HrtfMoving = AL_FALSE;