From 9e5a388dfe2dbd5250f80675426c95a9bdade39c Mon Sep 17 00:00:00 2001
From: Chris Robinson <chris.kcat@gmail.com>
Date: Mon, 24 Aug 2020 19:10:16 -0700
Subject: Add a method for effects to create persistent buffer data

---
 al/auxeffectslot.cpp | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

(limited to 'al/auxeffectslot.cpp')

diff --git a/al/auxeffectslot.cpp b/al/auxeffectslot.cpp
index bfacb290..88512bef 100644
--- a/al/auxeffectslot.cpp
+++ b/al/auxeffectslot.cpp
@@ -460,7 +460,14 @@ START_API_FUNC
                 DecrementRef(oldbuffer->ref);
             slot->Buffer = buffer;
 
-            /* TODO: Create a shared effectstate representation of the buffer. */
+            slot->Effect.Buffer = nullptr;
+            if(buffer)
+            {
+                FPUCtl mixer_mode{};
+                auto *state = slot->Effect.State.get();
+                slot->Effect.Buffer.reset(state->createBuffer(device, buffer->mData.data(),
+                    buffer->Frequency, buffer->mFmtType, buffer->mFmtChannels, buffer->SampleLen));
+            }
         }
         break;
 
@@ -730,6 +737,10 @@ ALenum ALeffectslot::initEffect(ALeffect *effect, ALCcontext *context)
         {
             FPUCtl mixer_mode{};
             State->deviceUpdate(Device);
+            Effect.Buffer = nullptr;
+            if(Buffer)
+                Effect.Buffer.reset(State->createBuffer(Device, Buffer->mData.data(),
+                    Buffer->Frequency, Buffer->mFmtType, Buffer->mFmtChannels, Buffer->SampleLen));
         }
 
         if(!effect)
-- 
cgit v1.2.3