aboutsummaryrefslogtreecommitdiffstats
path: root/alc
diff options
context:
space:
mode:
Diffstat (limited to 'alc')
-rw-r--r--alc/context.cpp47
-rw-r--r--alc/context.h12
2 files changed, 45 insertions, 14 deletions
diff --git a/alc/context.cpp b/alc/context.cpp
index 403c4fa3..86c76aaa 100644
--- a/alc/context.cpp
+++ b/alc/context.cpp
@@ -384,11 +384,6 @@ ALenum ALCcontext::eax_eax_get(
return AL_NO_ERROR;
}
-void ALCcontext::eax_update_filters()
-{
- ForEachSource(this, [](ALsource& source){ source.eax_commit(); });
-}
-
void ALCcontext::eax_commit_and_update_sources()
{
std::unique_lock<std::mutex> source_lock{mSourceLock};
@@ -600,16 +595,48 @@ void ALCcontext::eax5_context_set_defaults(Eax5State& state) noexcept
state.d = state.i;
}
-void ALCcontext::eax_context_set_defaults() noexcept
+void ALCcontext::eax4_context_set_current_defaults(const Eax4Props& props) noexcept
+{
+ static_cast<Eax4Props&>(eax_) = props;
+ eax_.flMacroFXFactor = EAXCONTEXT_DEFAULTMACROFXFACTOR;
+}
+
+void ALCcontext::eax5_context_set_current_defaults(const Eax5Props& props) noexcept
+{
+ eax_ = props;
+}
+
+void ALCcontext::eax_context_set_current_defaults()
+{
+ switch(eax_version_)
+ {
+ case 1:
+ case 2:
+ case 3:
+ eax5_context_set_current_defaults(eax123_.i);
+ break;
+ case 4:
+ eax4_context_set_current_defaults(eax4_.i);
+ break;
+ case 5:
+ eax5_context_set_current_defaults(eax5_.i);
+ break;
+ default:
+ eax_fail_unknown_version();
+ }
+
+ eax_df_ = ~EaxDirtyFlags{};
+}
+
+void ALCcontext::eax_context_set_defaults()
{
eax5_context_set_defaults(eax123_);
eax4_context_set_defaults(eax4_);
eax5_context_set_defaults(eax5_);
- eax_ = eax5_.i;
- eax_df_ = ~EaxDirtyFlags{};
+ eax_context_set_current_defaults();
}
-void ALCcontext::eax_set_defaults() noexcept
+void ALCcontext::eax_set_defaults()
{
eax_set_last_error_defaults();
eax_session_set_defaults();
@@ -626,7 +653,7 @@ void ALCcontext::eax_dispatch_fx_slot(const EaxCall& call)
if(fx_slot.eax_dispatch(call))
{
std::lock_guard<std::mutex> source_lock{mSourceLock};
- eax_update_filters();
+ ForEachSource(this, [](ALsource& source){ source.eax_mark_as_changed(); });
}
}
diff --git a/alc/context.h b/alc/context.h
index 660a6559..448ae980 100644
--- a/alc/context.h
+++ b/alc/context.h
@@ -204,7 +204,6 @@ public:
ALvoid* property_value,
ALuint property_value_size);
- void eax_update_filters();
void eax_commit_and_update_sources();
void eax_set_last_error() noexcept;
@@ -451,7 +450,9 @@ private:
if((eax_df_ & TDirtyBit) != EaxDirtyFlags{})
{
dst_df |= TDirtyBit;
- eax_.*member = state.i.*member;
+ const auto& src_d = state.d.*member;
+ state.i.*member = src_d;
+ eax_.*member = src_d;
}
}
@@ -473,8 +474,11 @@ private:
static void eax4_context_set_defaults(Eax4State& state) noexcept;
static void eax5_context_set_defaults(Eax5Props& props) noexcept;
static void eax5_context_set_defaults(Eax5State& state) noexcept;
- void eax_context_set_defaults() noexcept;
- void eax_set_defaults() noexcept;
+ void eax4_context_set_current_defaults(const Eax4Props& props) noexcept;
+ void eax5_context_set_current_defaults(const Eax5Props& props) noexcept;
+ void eax_context_set_current_defaults();
+ void eax_context_set_defaults();
+ void eax_set_defaults();
void eax_initialize_sources();