diff options
author | Chris Robinson <[email protected]> | 2020-09-05 18:12:46 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2020-09-05 18:13:08 -0700 |
commit | 7851f7d4ceff78f2722a4a2e3957c75dec26da1d (patch) | |
tree | 8377161321d12fa31e5396fad8111e10f7ec86c7 /al | |
parent | c1ad5d6055e5f40a8c6edc351f9a7f8047e7d07f (diff) |
Don't add effect slots to the active list until an effect is set
Diffstat (limited to 'al')
-rw-r--r-- | al/auxeffectslot.cpp | 7 | ||||
-rw-r--r-- | al/auxeffectslot.h | 8 |
2 files changed, 13 insertions, 2 deletions
diff --git a/al/auxeffectslot.cpp b/al/auxeffectslot.cpp index 1f35b344..5f71ea97 100644 --- a/al/auxeffectslot.cpp +++ b/al/auxeffectslot.cpp @@ -310,8 +310,6 @@ START_API_FUNC } while(--count); std::copy(ids.cbegin(), ids.cend(), effectslots); } - - AddActiveEffectSlots(effectslots, static_cast<ALuint>(n), context.get()); } END_API_FUNC @@ -404,6 +402,11 @@ START_API_FUNC context->setError(err, "Effect initialization failed"); return; } + if(slot->mState == SlotState::Initial) + { + AddActiveEffectSlots(&slot->id, 1, context.get()); + slot->mState = SlotState::Playing; + } break; case AL_EFFECTSLOT_AUXILIARY_SEND_AUTO: diff --git a/al/auxeffectslot.h b/al/auxeffectslot.h index 79373f45..3977b650 100644 --- a/al/auxeffectslot.h +++ b/al/auxeffectslot.h @@ -40,6 +40,12 @@ struct ALeffectslotProps { }; +enum class SlotState : ALenum { + Initial = AL_INITIAL, + Playing = AL_PLAYING, + Stopped = AL_STOPPED, +}; + struct ALeffectslot { float Gain{1.0f}; bool AuxSendAuto{true}; @@ -56,6 +62,8 @@ struct ALeffectslot { std::atomic_flag PropsClean; + SlotState mState{SlotState::Initial}; + RefCount ref{0u}; struct { |