aboutsummaryrefslogtreecommitdiffstats
path: root/al/eax/fx_slots.h
diff options
context:
space:
mode:
Diffstat (limited to 'al/eax/fx_slots.h')
-rw-r--r--al/eax/fx_slots.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/al/eax/fx_slots.h b/al/eax/fx_slots.h
new file mode 100644
index 00000000..49cabd75
--- /dev/null
+++ b/al/eax/fx_slots.h
@@ -0,0 +1,53 @@
+#ifndef EAX_FX_SLOTS_INCLUDED
+#define EAX_FX_SLOTS_INCLUDED
+
+
+#include <array>
+
+#include "al/auxeffectslot.h"
+
+#include "api.h"
+#include "fx_slot_index.h"
+
+
+class EaxFxSlots
+{
+public:
+ void initialize(
+ ALCcontext& al_context);
+
+ void uninitialize() noexcept;
+
+ void commit()
+ {
+ for(auto& fx_slot : fx_slots_)
+ fx_slot->eax_commit();
+ }
+
+
+ const ALeffectslot& get(
+ EaxFxSlotIndex index) const;
+
+ ALeffectslot& get(
+ EaxFxSlotIndex index);
+
+ void unlock_legacy() noexcept;
+
+
+private:
+ using Items = std::array<EaxAlEffectSlotUPtr, EAX_MAX_FXSLOTS>;
+
+
+ Items fx_slots_{};
+
+
+ [[noreturn]]
+ static void fail(
+ const char* message);
+
+ void initialize_fx_slots(
+ ALCcontext& al_context);
+}; // EaxFxSlots
+
+
+#endif // !EAX_FX_SLOTS_INCLUDED