diff options
-rw-r--r-- | Alc/alc.cpp | 7 | ||||
-rw-r--r-- | OpenAL32/Include/alAuxEffectSlot.h | 7 | ||||
-rw-r--r-- | OpenAL32/alAuxEffectSlot.cpp | 17 |
3 files changed, 15 insertions, 16 deletions
diff --git a/Alc/alc.cpp b/Alc/alc.cpp index 66c19b86..6aec72d0 100644 --- a/Alc/alc.cpp +++ b/Alc/alc.cpp @@ -2707,6 +2707,7 @@ static void FreeContext(ALCcontext *context) if(context->DefaultSlot) { DeinitEffectSlot(context->DefaultSlot); + delete context->DefaultSlot; context->DefaultSlot = nullptr; } @@ -3812,14 +3813,14 @@ ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCin } AllocateVoices(ALContext, 256, device->NumAuxSends); - // FIXME: Reenable after the default effect slot is handled again - if(0 && DefaultEffect.type != AL_EFFECT_NULL && device->Type == Playback) + if(DefaultEffect.type != AL_EFFECT_NULL && device->Type == Playback) { - ALContext->DefaultSlot = nullptr; + ALContext->DefaultSlot = new ALeffectslot{}; if(InitEffectSlot(ALContext->DefaultSlot) == AL_NO_ERROR) aluInitEffectPanning(ALContext->DefaultSlot); else { + delete ALContext->DefaultSlot; ALContext->DefaultSlot = nullptr; ERR("Failed to initialize the default effect slot\n"); } diff --git a/OpenAL32/Include/alAuxEffectSlot.h b/OpenAL32/Include/alAuxEffectSlot.h index 99060b74..38900695 100644 --- a/OpenAL32/Include/alAuxEffectSlot.h +++ b/OpenAL32/Include/alAuxEffectSlot.h @@ -4,6 +4,7 @@ #include "alMain.h" #include "alEffect.h" +#include "almalloc.h" #include "atomic.h" #ifdef __cplusplus @@ -99,7 +100,7 @@ struct ALeffectslotProps { }; -typedef struct ALeffectslot { +struct ALeffectslot { ALfloat Gain; ALboolean AuxSendAuto; @@ -148,7 +149,9 @@ typedef struct ALeffectslot { * output (FOAOut). */ alignas(16) ALfloat WetBuffer[MAX_EFFECT_CHANNELS][BUFFERSIZE]; -} ALeffectslot; + + DEF_NEWDEL(ALeffectslot) +}; ALenum InitEffectSlot(ALeffectslot *slot); void DeinitEffectSlot(ALeffectslot *slot); diff --git a/OpenAL32/alAuxEffectSlot.cpp b/OpenAL32/alAuxEffectSlot.cpp index 119bb038..e67571a2 100644 --- a/OpenAL32/alAuxEffectSlot.cpp +++ b/OpenAL32/alAuxEffectSlot.cpp @@ -142,13 +142,11 @@ AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslo iter = context->EffectSlotList.end() - 1; } - ALenum err{AL_OUT_OF_MEMORY}; - auto slot = static_cast<ALeffectslot*>(al_calloc(16, sizeof(ALeffectslot))); - if(slot) slot = new (slot) ALeffectslot{}; - if(!slot || (err=InitEffectSlot(slot)) != AL_NO_ERROR) + auto slot = new ALeffectslot{}; + ALenum err{InitEffectSlot(slot)}; + if(err != AL_NO_ERROR) { - slot->~ALeffectslot(); - al_free(slot); + delete slot; UnlockEffectSlotList(context); alDeleteAuxiliaryEffectSlots(cur, effectslots); @@ -201,9 +199,7 @@ AL_API ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, const ALuint * context->EffectSlotList[effectslots[i]-1] = nullptr; DeinitEffectSlot(slot); - - slot->~ALeffectslot(); - al_free(slot); + delete slot; } done: @@ -793,9 +789,8 @@ ALvoid ReleaseALAuxiliaryEffectSlots(ALCcontext *context) entry = nullptr; DeinitEffectSlot(slot); + delete slot; - slot->~ALeffectslot(); - al_free(slot); ++leftover; } if(leftover > 0) |