diff --git a/al/state.cpp b/al/state.cpp index fe3c064c7..b01bd799e 100644 --- a/al/state.cpp +++ b/al/state.cpp @@ -615,7 +615,11 @@ void UpdateContextProps(ALCcontext *context) props->OrientAt = listener.OrientAt; props->OrientUp = listener.OrientUp; props->Gain = listener.Gain; - props->MetersPerUnit = listener.mMetersPerUnit; + props->MetersPerUnit = listener.mMetersPerUnit +#ifdef ALSOFT_EAX + * context->eaxGetDistanceFactor() +#endif + ; props->AirAbsorptionGainHF = context->mAirAbsorptionGainHF; props->DopplerFactor = context->mDopplerFactor; diff --git a/alc/context.cpp b/alc/context.cpp index 2b7a9ea9d..4942290ea 100644 --- a/alc/context.cpp +++ b/alc/context.cpp @@ -212,11 +212,19 @@ void ALCcontext::init() mExtensionsString = std::move(extensions); } +#ifdef ALSOFT_EAX + eax_set_defaults(); +#endif + mParams.Position = alu::Vector{0.0f, 0.0f, 0.0f, 1.0f}; mParams.Matrix = alu::Matrix::Identity(); mParams.Velocity = alu::Vector{}; mParams.Gain = mListener.Gain; - mParams.MetersPerUnit = mListener.mMetersPerUnit; + mParams.MetersPerUnit = mListener.mMetersPerUnit +#ifdef ALSOFT_EAX + * eaxGetDistanceFactor() +#endif + ; mParams.AirAbsorptionGainHF = mAirAbsorptionGainHF; mParams.DopplerFactor = mDopplerFactor; mParams.SpeedOfSound = mSpeedOfSound * mDopplerVelocity; @@ -746,10 +754,7 @@ void ALCcontext::eax_context_commit_primary_fx_slot_id() void ALCcontext::eax_context_commit_distance_factor() { - if(mListener.mMetersPerUnit == mEax.flDistanceFactor) - return; - - mListener.mMetersPerUnit = mEax.flDistanceFactor; + /* mEax.flDistanceFactor was changed, so the context props are dirty. */ mPropsDirty = true; } diff --git a/alc/context.h b/alc/context.h index e1437fb31..da76a8193 100644 --- a/alc/context.h +++ b/alc/context.h @@ -232,7 +232,11 @@ struct ALCcontext : public al::intrusive_ref, ContextBase { void eaxSetLastError() noexcept; - EaxFxSlotIndex eaxGetPrimaryFxSlotIndex() const noexcept + [[nodiscard]] + auto eaxGetDistanceFactor() const noexcept -> float { return mEax.flDistanceFactor; } + + [[nodiscard]] + auto eaxGetPrimaryFxSlotIndex() const noexcept -> EaxFxSlotIndex { return mEaxPrimaryFxSlotIndex; } const ALeffectslot& eaxGetFxSlot(EaxFxSlotIndexValue fx_slot_index) const