diff options
Diffstat (limited to 'OpenAL32')
-rw-r--r-- | OpenAL32/Include/alMain.h | 2 | ||||
-rw-r--r-- | OpenAL32/Include/alu.h | 10 | ||||
-rw-r--r-- | OpenAL32/alSource.c | 11 |
3 files changed, 22 insertions, 1 deletions
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index 56df4db3..1afeb1e6 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -617,7 +617,9 @@ typedef struct HrtfState { typedef struct HrtfParams { alignas(16) ALfloat Coeffs[HRIR_LENGTH][2]; + alignas(16) ALfloat CoeffStep[HRIR_LENGTH][2]; ALuint Delay[2]; + ALint DelayStep[2]; } HrtfParams; diff --git a/OpenAL32/Include/alu.h b/OpenAL32/Include/alu.h index 56c37fe8..0462fda8 100644 --- a/OpenAL32/Include/alu.h +++ b/OpenAL32/Include/alu.h @@ -71,6 +71,13 @@ typedef struct DirectParams { ALfilterState HighPass; } Filters[MAX_INPUT_CHANNELS]; + struct { + HrtfParams Params[MAX_INPUT_CHANNELS]; + HrtfState State[MAX_INPUT_CHANNELS]; + ALuint IrSize; + ALfloat Gain; + ALfloat Dir[3]; + } Hrtf; MixGains Gains[MAX_INPUT_CHANNELS][MAX_OUTPUT_CHANNELS]; } DirectParams; @@ -99,7 +106,8 @@ typedef void (*MixerFunc)(const ALfloat *data, ALuint OutChans, ALfloat (*restrict OutBuffer)[BUFFERSIZE], struct MixGains *Gains, ALuint Counter, ALuint OutPos, ALuint BufferSize); typedef void (*HrtfMixerFunc)(ALfloat (*restrict OutBuffer)[BUFFERSIZE], const ALfloat *data, - ALuint Offset, const ALuint IrSize, const HrtfParams *hrtfparams, + ALuint Counter, ALuint Offset, ALuint OutPos, + const ALuint IrSize, const HrtfParams *hrtfparams, HrtfState *hrtfstate, ALuint BufferSize); diff --git a/OpenAL32/alSource.c b/OpenAL32/alSource.c index 12bd9436..be3768f3 100644 --- a/OpenAL32/alSource.c +++ b/OpenAL32/alSource.c @@ -2599,6 +2599,17 @@ ALvoid SetSourceState(ALsource *Source, ALCcontext *Context, ALenum state) voice->Direct.Moving = AL_FALSE; voice->Direct.Counter = 0; + for(i = 0;i < MAX_INPUT_CHANNELS;i++) + { + ALsizei j; + for(j = 0;j < HRTF_HISTORY_LENGTH;j++) + voice->Direct.Hrtf.State[i].History[j] = 0.0f; + for(j = 0;j < HRIR_LENGTH;j++) + { + voice->Direct.Hrtf.State[i].Values[j][0] = 0.0f; + voice->Direct.Hrtf.State[i].Values[j][1] = 0.0f; + } + } for(i = 0;i < (ALsizei)device->NumAuxSends;i++) { voice->Send[i].Moving = AL_FALSE; |