audio: clear mixer routes on destruction

This commit is contained in:
2026-04-14 16:48:39 +08:00
parent ee03f7035b
commit a4c48c1b3f
6 changed files with 241 additions and 8 deletions

View File

@@ -14,6 +14,7 @@
namespace XCEngine {
namespace Components {
class AudioSourceComponent;
class AudioListenerComponent;
}
namespace Audio {
@@ -63,6 +64,12 @@ public:
void RegisterSource(Components::AudioSourceComponent* source);
void UnregisterSource(Components::AudioSourceComponent* source);
void RegisterSourceComponent(Components::AudioSourceComponent* source);
void UnregisterSourceComponent(Components::AudioSourceComponent* source);
void RegisterListenerComponent(Components::AudioListenerComponent* listener);
void UnregisterListenerComponent(Components::AudioListenerComponent* listener);
void RegisterMixer(AudioMixer* mixer);
void UnregisterMixer(AudioMixer* mixer);
struct Stats {
uint32_t activeSources;
@@ -81,6 +88,7 @@ private:
void ProcessSource(Components::AudioSourceComponent* source, float* buffer, uint32 frameCount, uint32 channels, uint32 sampleRate);
void RenderAudioBlock(uint32 frameCount, uint32 channels, uint32 sampleRate);
void DetachMixerReferences(AudioMixer* mixer);
private:
std::unique_ptr<IAudioBackend> m_backend;
@@ -94,6 +102,9 @@ private:
Math::Quaternion m_listenerRotation = Math::Quaternion::Identity();
Math::Vector3 m_listenerVelocity = Math::Vector3::Zero();
std::vector<AudioMixer*> m_registeredMixers;
std::vector<Components::AudioSourceComponent*> m_registeredSourceComponents;
std::vector<Components::AudioListenerComponent*> m_registeredListenerComponents;
std::vector<Components::AudioSourceComponent*> m_activeSources;
std::vector<Components::AudioSourceComponent*> m_activeSourceSnapshot;
std::vector<float> m_mixScratchBuffer;