diff options
Diffstat (limited to 'al/effect.cpp')
-rw-r--r-- | al/effect.cpp | 138 |
1 files changed, 7 insertions, 131 deletions
diff --git a/al/effect.cpp b/al/effect.cpp index e4fe95b3..5a74ca53 100644 --- a/al/effect.cpp +++ b/al/effect.cpp @@ -751,139 +751,15 @@ void LoadReverbPreset(const char *name, ALeffect *effect) WARN("Reverb preset '%s' not found\n", name); } -#ifdef ALSOFT_EAX -namespace { - -class EaxAlEffectException : - public EaxException -{ -public: - explicit EaxAlEffectException( - const char* message) - : - EaxException{"[EAX_AL_EFFECT]", message} - { - } -}; // EaxAlEffectException - - -} // namespace - - -void ALeffect::eax_initialize() -{ - eax_effect = nullptr; - eax_effect = eax_create_eax_effect(type, Props); -} - -void ALeffect::eax_al_set_effect( - ALenum al_effect_type) -{ - if (al_effect_type != AL_EFFECT_NULL) - { - auto has_effect = false; - - for (const auto &effect_item : gEffectList) - { - if (al_effect_type == effect_item.val && !DisabledEffects[effect_item.type]) - { - has_effect = true; - break; - } - } - - if (!has_effect) - { - eax_fail("Effect not available."); - } - } - - InitEffectParams(this, al_effect_type); -} - -[[noreturn]] -void ALeffect::eax_fail( - const char* message) -{ - throw EaxAlEffectException{message}; -} - -EaxAlEffectDeleter::EaxAlEffectDeleter( - ALCcontext& context) noexcept - : - context_{&context} -{ -} - -void EaxAlEffectDeleter::operator()( - ALeffect* effect) const -{ - assert(effect); - - eax_al_delete_effect(*context_, *effect); -} - -EaxAlEffectUPtr eax_create_al_effect( - ALCcontext& context, - ALenum effect_type) +bool IsValidEffectType(ALenum type) noexcept { -#define EAX_PREFIX "[EAX_MAKE_EFFECT] " + if(type == AL_EFFECT_NULL) + return true; - auto& device = *context.mALDevice; - std::lock_guard<std::mutex> effect_lock{device.EffectLock}; - - // Allocate. - // - if (!EnsureEffects(&device, 1)) + for(const auto &effect_item : gEffectList) { - ERR(EAX_PREFIX "%s\n", "Failed to ensure."); - return nullptr; + if(type == effect_item.val && !DisabledEffects[effect_item.type]) + return true; } - - auto effect = EaxAlEffectUPtr{AllocEffect(&device), EaxAlEffectDeleter{context}}; - - if (!effect) - { - ERR(EAX_PREFIX "%s\n", "Failed to allocate."); - return nullptr; - } - - // Set the type. - // - auto is_supported = (effect_type == AL_EFFECT_NULL); - - if (!is_supported) - { - for (const auto& effect_item : gEffectList) - { - if(effect_type == effect_item.val && !DisabledEffects[effect_item.type]) - { - is_supported = true; - break; - } - } - } - - if (!is_supported) - { - ERR(EAX_PREFIX "Effect type 0x%04x not supported.\n", effect_type); - return nullptr; - } - - InitEffectParams(effect.get(), effect_type); - - return effect; - -#undef EAX_PREFIX -} - -void eax_al_delete_effect( - ALCcontext& context, - ALeffect& effect) -{ - auto& device = *context.mALDevice; - std::lock_guard<std::mutex> effect_lock{device.EffectLock}; - - FreeEffect(&device, &effect); + return false; } -#endif // ALSOFT_EAX |