| @@ -2039,18 +2039,18 @@ public: | |||||
| class ParamValueQueueList : public Vst::IParameterChanges | class ParamValueQueueList : public Vst::IParameterChanges | ||||
| { | { | ||||
| public: | public: | ||||
| ParamValueQueueList() {} | |||||
| ParamValueQueueList() : numQueuesUsed (0) {} | |||||
| virtual ~ParamValueQueueList() {} | virtual ~ParamValueQueueList() {} | ||||
| JUCE_DECLARE_VST3_COM_REF_METHODS | JUCE_DECLARE_VST3_COM_REF_METHODS | ||||
| JUCE_DECLARE_VST3_COM_QUERY_METHODS | JUCE_DECLARE_VST3_COM_QUERY_METHODS | ||||
| Steinberg::int32 PLUGIN_API getParameterCount() override { return (Steinberg::int32) queues.size(); } | |||||
| Vst::IParamValueQueue* PLUGIN_API getParameterData (Steinberg::int32 index) override { return queues[(int) index]; } | |||||
| Steinberg::int32 PLUGIN_API getParameterCount() override { return numQueuesUsed; } | |||||
| Vst::IParamValueQueue* PLUGIN_API getParameterData (Steinberg::int32 index) override { return isPositiveAndBelow (index, numQueuesUsed) ? queues[(int) index] : nullptr; } | |||||
| Vst::IParamValueQueue* PLUGIN_API addParameterData (const Vst::ParamID& id, Steinberg::int32& index) override | Vst::IParamValueQueue* PLUGIN_API addParameterData (const Vst::ParamID& id, Steinberg::int32& index) override | ||||
| { | { | ||||
| for (int i = queues.size(); --i >= 0;) | |||||
| for (int i = numQueuesUsed; --i >= 0;) | |||||
| { | { | ||||
| if (queues.getUnchecked (i)->getParameterId() == id) | if (queues.getUnchecked (i)->getParameterId() == id) | ||||
| { | { | ||||
| @@ -2059,25 +2059,32 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| index = getParameterCount(); | |||||
| return queues.add (new ParamValueQueue (id)); | |||||
| index = numQueuesUsed++; | |||||
| ParamValueQueue* valueQueue = (index < queues.size() ? queues[index] | |||||
| : queues.add (new ParamValueQueue)); | |||||
| valueQueue->clear(); | |||||
| valueQueue->setParamID (id); | |||||
| return valueQueue; | |||||
| } | } | ||||
| void clearAllQueues() noexcept | void clearAllQueues() noexcept | ||||
| { | { | ||||
| for (int i = queues.size(); --i >= 0;) | |||||
| queues.getUnchecked (i)->clear(); | |||||
| numQueuesUsed = 0; | |||||
| } | } | ||||
| struct ParamValueQueue : public Vst::IParamValueQueue | struct ParamValueQueue : public Vst::IParamValueQueue | ||||
| { | { | ||||
| ParamValueQueue (Vst::ParamID parameterID) : paramID (parameterID) | |||||
| ParamValueQueue () : paramID (static_cast<Vst::ParamID> (-1)) | |||||
| { | { | ||||
| points.ensureStorageAllocated (1024); | points.ensureStorageAllocated (1024); | ||||
| } | } | ||||
| virtual ~ParamValueQueue() {} | virtual ~ParamValueQueue() {} | ||||
| void setParamID (Vst::ParamID pID) noexcept { paramID = pID; } | |||||
| JUCE_DECLARE_VST3_COM_REF_METHODS | JUCE_DECLARE_VST3_COM_REF_METHODS | ||||
| JUCE_DECLARE_VST3_COM_QUERY_METHODS | JUCE_DECLARE_VST3_COM_QUERY_METHODS | ||||
| @@ -2129,7 +2136,7 @@ public: | |||||
| }; | }; | ||||
| Atomic<int> refCount; | Atomic<int> refCount; | ||||
| const Vst::ParamID paramID; | |||||
| Vst::ParamID paramID; | |||||
| Array<ParamPoint> points; | Array<ParamPoint> points; | ||||
| CriticalSection pointLock; | CriticalSection pointLock; | ||||
| @@ -2138,6 +2145,7 @@ public: | |||||
| Atomic<int> refCount; | Atomic<int> refCount; | ||||
| OwnedArray<ParamValueQueue> queues; | OwnedArray<ParamValueQueue> queues; | ||||
| int numQueuesUsed; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParamValueQueueList) | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ParamValueQueueList) | ||||
| }; | }; | ||||