// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project // SPDX-License-Identifier: MPL-2.0 #pragma once #include #include #include #include #include #include #include #include #include #include namespace AudioCore::AudioRenderer { /** * Reset an effect, and create a new one of the given type. * * @param effect - Effect to reset and re-construct. * @param type - Type of the new effect to create. */ static void ResetEffect(EffectInfoBase* effect, const EffectInfoBase::Type type) { *effect = {}; switch (type) { case EffectInfoBase::Type::Invalid: std::construct_at(effect); effect->SetType(EffectInfoBase::Type::Invalid); break; case EffectInfoBase::Type::Mix: std::construct_at(reinterpret_cast(effect)); effect->SetType(EffectInfoBase::Type::Mix); break; case EffectInfoBase::Type::Aux: std::construct_at(reinterpret_cast(effect)); effect->SetType(EffectInfoBase::Type::Aux); break; case EffectInfoBase::Type::Delay: std::construct_at(reinterpret_cast(effect)); effect->SetType(EffectInfoBase::Type::Delay); break; case EffectInfoBase::Type::Reverb: std::construct_at(reinterpret_cast(effect)); effect->SetType(EffectInfoBase::Type::Reverb); break; case EffectInfoBase::Type::I3dl2Reverb: std::construct_at(reinterpret_cast(effect)); effect->SetType(EffectInfoBase::Type::I3dl2Reverb); break; case EffectInfoBase::Type::BiquadFilter: std::construct_at(reinterpret_cast(effect)); effect->SetType(EffectInfoBase::Type::BiquadFilter); break; case EffectInfoBase::Type::LightLimiter: std::construct_at(reinterpret_cast(effect)); effect->SetType(EffectInfoBase::Type::LightLimiter); break; case EffectInfoBase::Type::Capture: std::construct_at(reinterpret_cast(effect)); effect->SetType(EffectInfoBase::Type::Capture); break; case EffectInfoBase::Type::Compressor: std::construct_at(reinterpret_cast(effect)); effect->SetType(EffectInfoBase::Type::Compressor); break; } } } // namespace AudioCore::AudioRenderer