aboutsummaryrefslogtreecommitdiffstats
path: root/al
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2020-09-05 18:12:46 -0700
committerChris Robinson <[email protected]>2020-09-05 18:13:08 -0700
commit7851f7d4ceff78f2722a4a2e3957c75dec26da1d (patch)
tree8377161321d12fa31e5396fad8111e10f7ec86c7 /al
parentc1ad5d6055e5f40a8c6edc351f9a7f8047e7d07f (diff)
Don't add effect slots to the active list until an effect is set
Diffstat (limited to 'al')
-rw-r--r--al/auxeffectslot.cpp7
-rw-r--r--al/auxeffectslot.h8
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 {