axmol/thirdparty/openal/al/eax/fx_slots.cpp

76 lines
1.3 KiB
C++
Raw Normal View History

2022-04-25 12:02:45 +08:00
#include "config.h"
#include "fx_slots.h"
2022-04-25 12:02:45 +08:00
#include <array>
#include "api.h"
#include "exception.h"
2022-04-25 12:02:45 +08:00
namespace
{
class EaxFxSlotsException :
public EaxException
{
public:
explicit EaxFxSlotsException(
const char* message)
:
EaxException{"EAX_FX_SLOTS", message}
{
}
}; // EaxFxSlotsException
} // namespace
2023-02-04 15:03:54 +08:00
void EaxFxSlots::initialize(ALCcontext& al_context)
2022-04-25 12:02:45 +08:00
{
2023-02-04 15:03:54 +08:00
initialize_fx_slots(al_context);
2022-04-25 12:02:45 +08:00
}
void EaxFxSlots::uninitialize() noexcept
{
for (auto& fx_slot : fx_slots_)
{
fx_slot = nullptr;
}
}
const ALeffectslot& EaxFxSlots::get(EaxFxSlotIndex index) const
{
if(!index.has_value())
fail("Empty index.");
return *fx_slots_[index.value()];
}
ALeffectslot& EaxFxSlots::get(EaxFxSlotIndex index)
{
if(!index.has_value())
fail("Empty index.");
return *fx_slots_[index.value()];
}
[[noreturn]]
void EaxFxSlots::fail(
const char* message)
{
throw EaxFxSlotsException{message};
}
2023-02-04 15:03:54 +08:00
void EaxFxSlots::initialize_fx_slots(ALCcontext& al_context)
2022-04-25 12:02:45 +08:00
{
auto fx_slot_index = EaxFxSlotIndexValue{};
for (auto& fx_slot : fx_slots_)
{
fx_slot = eax_create_al_effect_slot(al_context);
2023-02-04 15:03:54 +08:00
fx_slot->eax_initialize(al_context, fx_slot_index);
2022-04-25 12:02:45 +08:00
fx_slot_index += 1;
}
}