diff options
author | Chris Robinson <[email protected]> | 2011-08-31 02:18:16 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2011-08-31 02:18:16 -0700 |
commit | b28f48c1bdf343ecc0a3e1dbed958b13fbba32e7 (patch) | |
tree | 36949865561b5f06b0d39569e47b807d94e9931d /OpenAL32 | |
parent | 49e2fa428fced4d2ab1e390ad3397dd9e11df960 (diff) |
Store the filter gains directly in the source instead of duplicate filter objects
Diffstat (limited to 'OpenAL32')
-rw-r--r-- | OpenAL32/Include/alSource.h | 6 | ||||
-rw-r--r-- | OpenAL32/alSource.c | 32 |
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; |